博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
设计模式之三:抽象工厂模式
阅读量:4147 次
发布时间:2019-05-25

本文共 2238 字,大约阅读时间需要 7 分钟。

设计模式之三:抽象工厂模式
http://www.taidous.com/thread-48169-1-1.html

(出处: 【泰斗社区】-专注互联网游戏和应用的开发者平台)

     抽象工厂模式(Abstract Factory Pattern):
     定义:Provide an interface for creating families of related or dependent objects without specifying their concrete classes.(为创建一组相关或相互依赖的对象提供一个接口,而且无需指定他们的具体类)。
    图:

 优点:

        1、抽象工厂模式隔离了具体类的生产,使得客户并不需要知道什么被创建。

        2、当一个产品族中的多个对象被设计成一起工作时,它能保证客户端始终只使用同一个产品族中的对象。

        3、增加新的具体工厂和产品族很方便,无须修改已有系统,符合“开闭原则”。

       缺点:
        扩展非常困难

      实现:
抽象产品类1
///    ///Product族1,KFC食品    ///    public abstract class KFCFood    {        public abstract void Display();    }
产品类1的实现类:鸡腿

public class Chicken :KFCFood    {        public override void Display()        {            Console.WriteLine("鸡腿 + 1");        }    }

产品类1的实现类:鸡翅

public class Wings :KFCFood   {       public override void Display()       {           Console.WriteLine("鸡翅 + 1");       }   }


抽象产品类2

///[/font][/color]   ///Product族2,KFC饮料    ///    public abstract class KFCDrink    {        public abstract void Display();    }


抽象产品类2的实现类 :可乐
public class Coke :KFCDrink    {        public override void Display()        {            Console.WriteLine("可乐 + 1");        }    }

抽象产品类2的实现类:咖啡


public class Coffee :KFCDrink   {       public override void Display()       {           Console.WriteLine("咖啡 + 1");       }   }

抽象工厂类:

///    ///抽象工厂,生产套餐    ///    public interface IKFCFactory    {        KFCFood CreateFood();        KFCDrink CreateDrink();    }}
产品等级1的实现类: 经济型套餐

///   ///经济型套餐,包括鸡翅和可乐   ///   public class CheapPackageFactory :IKFCFactory   {       public KFCFood CreateFood()       {           returnnew Wings();       }       public KFCDrink CreateDrink()       {           returnnew Coke();       }   }
产品等级2的实现类:豪华型套餐

      
///    ///豪华型套餐,包括鸡腿和咖啡    ///    public class LuxuryPackageFactory :IKFCFactory    {        public KFCFood CreateFood()        {            returnnew Chicken();        }         public KFCDrink CreateDrink()        {            returnnew Coffee();        }    }


场景实现:
class Program   {       static void Main(string[] args)       {           IKFCFactory factory =new CheapPackageFactory();           KFCFood food =factory.CreateFood();           food.Display();            KFCDrink drink =factory.CreateDrink();           drink.Display();                 }   }

你可能感兴趣的文章
python实现100以内自然数之和,偶数之和
查看>>
python数字逆序输出及多个print输出在同一行
查看>>
苏宁产品经理面经
查看>>
百度产品经理群面
查看>>
去哪儿一面+平安科技二面+hr面+贝贝一面+二面产品面经
查看>>
pytorch
查看>>
pytorch(三)
查看>>
ubuntu相关
查看>>
C++ 调用json
查看>>
nano中设置脚本开机自启动
查看>>
动态库调动态库
查看>>
Kubernetes集群搭建之CNI-Flanneld部署篇
查看>>
k8s web终端连接工具
查看>>
手绘VS码绘(一):静态图绘制(码绘使用P5.js)
查看>>
手绘VS码绘(二):动态图绘制(码绘使用Processing)
查看>>
基于P5.js的“绘画系统”
查看>>
《达芬奇的人生密码》观后感
查看>>
论文翻译:《一个包容性设计的具体例子:聋人导向可访问性》
查看>>
基于“分形”编写的交互应用
查看>>
《融入动画技术的交互应用》主题博文推荐
查看>>