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