抽象工厂模式:
提供一个接口,用于创建相关的依赖对象的家族,而不需要明确指定类
该模式符合依赖倒转原则,高级对象不依赖于低级对象,两者都依赖于抽象。
我个人认为就是高级对象抽象成高级接口,低级对象抽象成低级接口,2者的依赖关系转化为2种接口的之间的依赖,而非对象之间的依赖关系,从而达到松耦合的效果。
抽象工厂强调的就是封装,将需要不同的对象创建部分放在不同的工厂里面,有选择性的返回不同的对象,以下我以造车工厂--汽车为例:
1
public interface IShowProduct
2
{
3
void ShowProduct();
4
}
5![](/Images/OutliningIndicators/None.gif)
6
public interface IAbstractFactory
7
{
8
IFactory CreateFactory(string name);
9
}
10![](/Images/OutliningIndicators/None.gif)
11
public interface IFactory :IShowProduct
12
{
13
ICar CreateCar(string name);
14
15
}
16![](/Images/OutliningIndicators/None.gif)
17
public interface ICar : IShowProduct
18
{
19![](/Images/OutliningIndicators/InBlock.gif)
20
}
21![](/Images/OutliningIndicators/None.gif)
22
public class AbstractFactory : IAbstractFactory
23
{
24
IAbstractFactory Members
36
}
37![](/Images/OutliningIndicators/None.gif)
38![](/Images/OutliningIndicators/None.gif)
39
public class Factory_1 : IFactory
40
{
41![](/Images/OutliningIndicators/InBlock.gif)
42
IFactory Members
54![](/Images/OutliningIndicators/InBlock.gif)
55
IShowProduct Members
63
}
64![](/Images/OutliningIndicators/None.gif)
65
public class Factory_2 : IFactory
66
{
67![](/Images/OutliningIndicators/InBlock.gif)
68
IFactory Members
80![](/Images/OutliningIndicators/InBlock.gif)
81
IShowProduct Members
89
}
90![](/Images/OutliningIndicators/None.gif)
91
public class BMW : ICar
92
{
93![](/Images/OutliningIndicators/InBlock.gif)
94
IShowProduct Members
102
}
103![](/Images/OutliningIndicators/None.gif)
104
public class QQ : ICar
105
{
106![](/Images/OutliningIndicators/InBlock.gif)
107
IShowProduct Members
115
}
116![](/Images/OutliningIndicators/None.gif)
117
public class Hyc : ICar
118
{
119![](/Images/OutliningIndicators/InBlock.gif)
120
IShowProduct Members
128
}
129![](/Images/OutliningIndicators/None.gif)
130
public class Hgpc : ICar
131
{
132![](/Images/OutliningIndicators/InBlock.gif)
133
IShowProduct Members
141
}
142![](/Images/OutliningIndicators/None.gif)
143
public class Mc : ICar
144
{
145![](/Images/OutliningIndicators/InBlock.gif)
146
IShowProduct Members
154
}
155![](/Images/OutliningIndicators/None.gif)
156
class Program
157
{
158
static void Main(string[] args)
159
{
160
string carName = "大奔驰";
161
string factoryName = "工厂1";
162
Console.WriteLine(string.Format("我选择了{0},要制造{1}", factoryName, carName));
163
IAbstractFactory abstractfactory = new AbstractFactory();
164
IFactory factory = abstractfactory.CreateFactory(factoryName);
165
factory.ShowProduct();
166
ICar car = factory.CreateCar(carName);
167
car.ShowProduct();
168![](/Images/OutliningIndicators/InBlock.gif)
169
carName = "QQ";
170
factoryName = "工厂1";
171
Console.WriteLine(string.Format("我选择了{0},要制造{1}", factoryName, carName));
172![](/Images/OutliningIndicators/InBlock.gif)
173
IFactory factory_2 = abstractfactory.CreateFactory(factoryName);
174
factory_2.ShowProduct();
175
car = factory_2.CreateCar(carName);
176
car.ShowProduct();
177![](/Images/OutliningIndicators/InBlock.gif)
178
Console.Read();
179
}
180
}
![](/Images/OutliningIndicators/None.gif)
2
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
3
![](/Images/OutliningIndicators/InBlock.gif)
4
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
5
![](/Images/OutliningIndicators/None.gif)
6
![](/Images/OutliningIndicators/None.gif)
7
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
8
![](/Images/OutliningIndicators/InBlock.gif)
9
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
10
![](/Images/OutliningIndicators/None.gif)
11
![](/Images/OutliningIndicators/None.gif)
12
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
13
![](/Images/OutliningIndicators/InBlock.gif)
14
![](/Images/OutliningIndicators/InBlock.gif)
15
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
16
![](/Images/OutliningIndicators/None.gif)
17
![](/Images/OutliningIndicators/None.gif)
18
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
19
![](/Images/OutliningIndicators/InBlock.gif)
20
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
21
![](/Images/OutliningIndicators/None.gif)
22
![](/Images/OutliningIndicators/None.gif)
23
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
24
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
36
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
37
![](/Images/OutliningIndicators/None.gif)
38
![](/Images/OutliningIndicators/None.gif)
39
![](/Images/OutliningIndicators/None.gif)
40
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
41
![](/Images/OutliningIndicators/InBlock.gif)
42
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
54
![](/Images/OutliningIndicators/InBlock.gif)
55
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
63
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
64
![](/Images/OutliningIndicators/None.gif)
65
![](/Images/OutliningIndicators/None.gif)
66
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
67
![](/Images/OutliningIndicators/InBlock.gif)
68
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
80
![](/Images/OutliningIndicators/InBlock.gif)
81
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
89
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
90
![](/Images/OutliningIndicators/None.gif)
91
![](/Images/OutliningIndicators/None.gif)
92
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
93
![](/Images/OutliningIndicators/InBlock.gif)
94
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
102
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
103
![](/Images/OutliningIndicators/None.gif)
104
![](/Images/OutliningIndicators/None.gif)
105
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
106
![](/Images/OutliningIndicators/InBlock.gif)
107
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
115
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
116
![](/Images/OutliningIndicators/None.gif)
117
![](/Images/OutliningIndicators/None.gif)
118
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
119
![](/Images/OutliningIndicators/InBlock.gif)
120
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
128
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
129
![](/Images/OutliningIndicators/None.gif)
130
![](/Images/OutliningIndicators/None.gif)
131
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
132
![](/Images/OutliningIndicators/InBlock.gif)
133
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
141
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
142
![](/Images/OutliningIndicators/None.gif)
143
![](/Images/OutliningIndicators/None.gif)
144
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
145
![](/Images/OutliningIndicators/InBlock.gif)
146
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
154
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
155
![](/Images/OutliningIndicators/None.gif)
156
![](/Images/OutliningIndicators/None.gif)
157
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
158
![](/Images/OutliningIndicators/InBlock.gif)
159
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
160
![](/Images/OutliningIndicators/InBlock.gif)
161
![](/Images/OutliningIndicators/InBlock.gif)
162
![](/Images/OutliningIndicators/InBlock.gif)
163
![](/Images/OutliningIndicators/InBlock.gif)
164
![](/Images/OutliningIndicators/InBlock.gif)
165
![](/Images/OutliningIndicators/InBlock.gif)
166
![](/Images/OutliningIndicators/InBlock.gif)
167
![](/Images/OutliningIndicators/InBlock.gif)
168
![](/Images/OutliningIndicators/InBlock.gif)
169
![](/Images/OutliningIndicators/InBlock.gif)
170
![](/Images/OutliningIndicators/InBlock.gif)
171
![](/Images/OutliningIndicators/InBlock.gif)
172
![](/Images/OutliningIndicators/InBlock.gif)
173
![](/Images/OutliningIndicators/InBlock.gif)
174
![](/Images/OutliningIndicators/InBlock.gif)
175
![](/Images/OutliningIndicators/InBlock.gif)
176
![](/Images/OutliningIndicators/InBlock.gif)
177
![](/Images/OutliningIndicators/InBlock.gif)
178
![](/Images/OutliningIndicators/InBlock.gif)
179
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
180
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)