Java设计模式-抽象工厂模式(Abstract Factory Pattern)
抽象工厂概念
抽象工厂相对工厂方法,可以创建一个产品族,而不是单一的产品。也就是在工厂方法上添加了创建其他产品方法。
如图:
- SeasonFactory:季节工厂
- SpringFactory:春天工厂
- SummerFactory:夏天工厂
- Clothes:衣服
- Coat:上衣
- Trousers:裤子
Java代码如下:在范例中,如果要创建夏天的一套衣服,直接使用SummerFactory创建上衣和裤子就可以,这样的话身上一套就是夏天的装扮,避免因为出现混搭而出现问题。在实际生活中,电脑主板和CPU的针脚是需要对应,可以使用该抽象方法,避免组别和CUP针脚对不上。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85interface Clothes{
void coth();
}
interface Coat extends Clothes{
}
interface Trousers extends Clothes{
}
class SpringCoat implements Coat{
public void coth() {
System.out.println("春天的上衣");
}
}
class SummerCoat implements Coat{
public void coth() {
System.out.println("夏天的上衣");
}
}
class SpringTrousers implements Trousers{
public void coth() {
System.out.println("春天的裤子");
}
}
class SummerTrousers implements Trousers{
public void coth() {
System.out.println("夏天的裤子");
}
}
interface SeaconFactory{
Clothes createCoat();
Clothes createTrousers();
}
class SpringFactory implements SeaconFactory{
public Clothes createCoat() {
Clothes coat = new SpringCoat();
System.out.println("创建:" + coat.getClass().getSimpleName());
//do some thing
return coat;
}
public Clothes createTrousers() {
Clothes trousers = new SpringTrousers();
System.out.println("创建:" + trousers.getClass().getSimpleName());
//do some thing
return trousers;
}
}
class SummerFactory implements SeaconFactory{
public Clothes createCoat() {
Clothes clothes = new SummerCoat();
System.out.println("创建:" + clothes.getClass().getSimpleName());
//do some thing
return clothes;
}
public Clothes createTrousers() {
Clothes clothes = new SummerTrousers();
System.out.println("创建:" + clothes.getClass().getSimpleName());
//do some thing
return clothes;
}
}
抽象工厂模式优点
- 一个工厂车间一系列相关相互依赖的对象,避免出现混合。
- 新增产品族时,无需修改系统,比如冬天的衣服。符合“开闭原则”。
抽象工厂模式缺点
- 新增产品的时候比较麻烦,比如新增鞋子。
总结
抽象工厂是在工厂方法模式上的增强,一个工厂类可以创建多个产品。