简单工厂设计模式(先拷贝来在理解)

  1.  设计模式笔记-抽象工厂模式     
  2.       
  3. 摘要:
  4.  设计模式学习-抽象工厂模式
  5. 介绍了抽象工厂模式的基本概念,并给出了c#语言编写的程序示例 
  6.        抽象工厂模式向客户端提供一个接口,使得客户端在不必指定具体类型的情况下,创建多个产品族中的对象。本文采取的仍然是接着以 
  7. 前的那个快餐店的例子。
  8.       现在,快餐店经常良好,逐渐发展壮大,为了适合不同地方人的饮食习惯,创建了两大系列(相当于产品族)快餐,北方系列和南方系 
  9. 列。每个系列分别由一个大厨掌勺。
  10.       抽象工厂模式对新的产品族支持开闭原则,但对新的产品不支持开闭原则。例如增加新的产品族,如增加美国系列快餐(相当于增加了 
  11. 一个产品族),则只要从每个产品接口继承一个相应美国系列产品即可,不需要更改已有的代码。但如果增加新产品,比如增加了“馒头”这
  12. 个产品,则它是不支持开闭原则的,因为你要在厨师接口中,增加返回“馒头”的方法,这就要修改已存在的接口,而修改了上层接口,继承
  13. 此接口的具体类也要随之改变。
  14.        使用抽象工厂模式的条件:
  15. 1 一个系统不应依赖于产品如何被创建,组合和表达的细节。
  16. 2 有多个产品族,而系统只消费其中一个族中的产品
  17. 3 同属于一个产品族的产品是在一起使用的。
  18. 4 系统提供一个产品的库,所有产品都是以同样的接口实现。 
  19. 看下面的C#实现:
  20. using System;
  21. namespace AbstractFactory
  22. {
  23.  /// <summary>
  24.  /// 抽象工厂模式示例
  25.  /// </summary>
  26.  class AbstractFactory
  27.  { 
  28.   //定义厨师的抽象工厂
  29.   public interface Chef
  30.   {
  31.        //这里定义厨师的公共操作
  32.        //返回抽象面条
  33.        Noodle MakeNoodle();
  34.        //返回抽象米饭
  35.        Rice MakeRice();
  36.        //返回抽象面包
  37.        Bread MakeBread(); 
  38.   }
  39.   //定义北方厨师,实现厨师接口
  40.   class NorthChef:Chef
  41.   {
  42.        public Noodle MakeNoodle()
  43.        {
  44.             Console.WriteLine("/n制作北方面条...");
  45.             Noodle noodle=new NorthNoodle();
  46.             return noodle;
  47.        }
  48.        public Rice MakeRice()
  49.        {
  50.             Console.WriteLine("/n制作北方米饭...");
  51.             Rice rice=new NorthRice();
  52.             return rice;
  53.        }
  54.        public Bread MakeBread()
  55.        {
  56.             Console.WriteLine("/n正在制作北方面包..");
  57.             Bread bread=new NorthBread();
  58.             return bread;
  59.        }
  60.   } 
  61.   //定义南方厨师,实现厨师接口
  62.   class SouthChef:Chef
  63.   {
  64.        public Noodle MakeNoodle()
  65.        {
  66.             Console.WriteLine("/n正在制作南方面条。。。");
  67.             Noodle noodle=new SouthNoodle();
  68.             return noodle;
  69.        }
  70.        public Rice MakeRice()
  71.        {
  72.             Console.WriteLine("/n正在制作南方米饭。。。");
  73.             Rice rice=new SouthRice();
  74.             return rice;
  75.        }
  76.        public Bread MakeBread()
  77.        {
  78.             Console.WriteLine("/n正在制作南方面包。。。");
  79.             Bread bread=new SouthBread();
  80.             return bread;
  81.        }
  82.   }
  83.   
  84.   //定义面条产品
  85.   public interface Noodle
  86.   {
  87.        //这里定义面条的公共操作
  88.   } 
  89.   class NorthNoodle:Noodle
  90.   {
  91.       public NorthNoodle()
  92.       {
  93.             Console.WriteLine("/n一碗地道的北方面条产生了");
  94.       }
  95.   } 
  96.   class SouthNoodle:Noodle
  97.   {
  98.        public SouthNoodle()
  99.       {
  100.             Console.WriteLine("/n一碗地道的南方面条产生了"); 
  101.        }
  102.   }
  103.   
  104.   //定义米饭产品     
  105.   public interface Rice
  106.   {
  107.        //这里定义米饭的公共操作 
  108.   }
  109.   class NorthRice:Rice
  110.   {
  111.   
  112.        public NorthRice()
  113.        {
  114.             Console.WriteLine("/n一碗地道的北方米饭产生了,真好吃");
  115.        }
  116.   } 
  117.   class SouthRice:Rice
  118.   {
  119.   
  120.        public SouthRice()
  121.        {
  122.              Console.WriteLine("/n一碗地道的南方米饭产生了,真难吃");
  123.        }
  124.   } 
  125.   //定义面包
  126.   public interface Bread
  127.   {
  128.         / /这里可以定义一些面包的公共操作
  129.   }
  130.   class NorthBread:Bread
  131.   {
  132.   
  133.        public NorthBread()
  134.        {
  135.             Console.WriteLine("/n一个地道的北方面包产生了");
  136.        }
  137.   } 
  138.   class SouthBread:Bread
  139.   {
  140.        public SouthBread()
  141.        {
  142.             Console.WriteLine("/n一个地道的南方面包产生了");
  143.        }
  144.   } 
  145.   /// <summary>
  146.   /// 应用程序的主入口点。
  147.   /// </summary>
  148.   [STAThread]
  149.   static void Main(string[] args)
  150.   {
  151.        //针对接口编程,创建对象尽量返回上层接口,避免使用具体类
  152.        //下面隐藏了具体的创建各种面条,米饭和面包的过程
  153.        Chef northChef=new NorthChef();
  154.        northChef.MakeNoodle();
  155.        northChef.MakeRice();
  156.        northChef.MakeBread();
  157.    
  158.        Chef southChef=new SouthChef();
  159.        southChef.MakeBread();
  160.        southChef.MakeNoodle();
  161.        southChef.MakeRice(); 
  162.        Console.ReadLine();
  163.   }
  164.  }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值