1.搞笑版抽象工厂模式及其实现

Abstract Factory—追MM少不了请吃饭了,麦当劳的鸡翅和肯德基的鸡翅都是MM爱吃的东西,虽然口味有所不同,但不管你带MM去麦当劳或肯德基,只管向服务员说“来四个鸡翅”就行了。麦当劳和肯德基就是生产鸡翅的Factory 

 

  1 using System;
  2 using System.Collections.Generic;
  3 using System.Linq;
  4 using System.Text;
  5 
  6 namespace AbstractFactory
  7 {
  8     //抽象鸡翅类
  9     public abstract class ChickenWings
 10     { 
 11         //假设鸡翅的制作有以下几个步骤:
 12         //1.解冻
 13         public abstract void Thaw();
 14         //2.烘烤
 15         public abstract void Bake();
 16         //3.出炉
 17         public abstract void Released();
 18     }
 19 
 20     //肯德基的鸡翅
 21     public class KFC_ChickenWings : ChickenWings
 22     {
 23         public override void Thaw()
 24         {
 25             //Console.WriteLine("KFC ChickenWings Thawing.");
 26         }
 27 
 28         public override void Bake()
 29         {
 30             //Console.WriteLine("KFC ChickenWings Baking.");
 31         }
 32 
 33         public override void Released()
 34         {
 35             //Console.WriteLine("KFC ChickenWings Released.");
 36         }
 37     }
 38 
 39     //麦当劳的鸡翅
 40     public class McDonaldS_ChickenWings : ChickenWings
 41     {
 42         public override void Thaw()
 43         {
 44             //Console.WriteLine("McDonald'S ChickenWings Thawing.");
 45         }
 46 
 47         public override void Bake()
 48         {
 49             //Console.WriteLine("McDonald'S ChickenWings Baking.");
 50         }
 51 
 52         public override void Released()
 53         {
 54             //Console.WriteLine("McDonald'S ChickenWings Released.");
 55         }
 56     }
 57 
 58     //抽象鸡翅工厂类
 59     public abstract class ChickenWingsFactory
 60     {
 61         //生产鸡翅
 62         public abstract void Made();
 63         //送上四个鸡翅
 64         public abstract void Offer();
 65     }
 66 
 67     //肯德基的鸡翅生产工厂
 68     public class KFC_ChickenWingsFactory : ChickenWingsFactory
 69     {
 70         ChickenWings chickenWings = new KFC_ChickenWings();
 71         public override void Made()
 72         {
 73             chickenWings.Thaw();
 74             chickenWings.Bake();
 75             chickenWings.Released();
 76         }
 77 
 78         public override void Offer()
 79         {
 80             Made();
 81             Made();
 82             Made();
 83             Made();
 84             Console.WriteLine("Give the customer four KFC ChickenWings");
 85         }
 86     }
 87 
 88     //麦当劳的鸡翅生产工厂
 89     public class McDonaldS_ChickenWingsFactory : ChickenWingsFactory
 90     {
 91         ChickenWings chickenWings = new McDonaldS_ChickenWings();
 92         public override void Made()
 93         {
 94             chickenWings.Thaw();
 95             chickenWings.Bake();
 96             chickenWings.Released();
 97         }
 98 
 99         public override void Offer()
100         {
101             Made();
102             Made();
103             Made();
104             Made();
105             Console.WriteLine("Give the customer four McDonald'S ChickenWings");
106         }
107     }
108 
109     class Client
110     {
111         static void Main(string[] args)
112         {
113             //当你带MM去肯德基时:跟服务员要四个鸡翅
114             ChickenWingsFactory KFC_Chicken = new KFC_ChickenWingsFactory();
115             KFC_Chicken.Offer();
116 
117             //当你带MM去麦当劳时:跟服务员要四个鸡翅
118             ChickenWingsFactory McDonaldS_Chicken = new McDonaldS_ChickenWingsFactory();
119             McDonaldS_Chicken.Offer();
120         }
121     }
122 }

 

抽象工厂模式:客户类和工厂类分开。消费者任何时候需要某种产品,只需向工厂请求即可。消费者无须修改就可以接纳新产品。缺点是当产品修改时,工厂类也要做相应的修改。如:如何创建及如何向客户端提供。 

 

posted @ 2011-03-31 04:09  山之松  阅读(130)  评论(0编辑  收藏  举报