抽象工厂模式(Abstract Factory)

1

定义

  抽象工厂模式(Abstract Factory):也属于创建型模式,是工厂模式的一种。抽象工厂模式和工厂方法模式非常相似,下面通过代码和类图展示它们的区别。

代码实战

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
interface Pizza {
void bake();
}

interface Hamburger {
void make();
}

interface Factory {
Pizza createPizza();

Hamburger createHamburger();
}

class CheesePizza implements Pizza{
@Override
public void bake() {
System.out.println("add cheese to bake");
}
}

class BeefPizza implements Pizza{
@Override
public void bake() {
System.out.println("add beef to bake");
}
}

class CheeseHamburger implements Hamburger{
@Override
public void make() {
System.out.println("add cheese to make");
}
}

class BeefHamburger implements Hamburger{
@Override
public void make() {
System.out.println("add beef to make");
}
}

class CheeseFactory implements Factory {
@Override
public Pizza createPizza() {
return new CheesePizza();
}

@Override
public Hamburger createHamburger() {
return new CheeseHamburger();
}
}

class BeefFactory implements Factory {
@Override
public Pizza createPizza() {
return new BeefPizza();
}

@Override
public Hamburger createHamburger() {
return new BeefHamburger();
}
}

class Test {
public static void main(String[] args) {
Pizza cheesePizza = new CheeseFactory().createPizza();
cheesePizza.bake();

Hamburger cheeseHamburger = new CheeseFactory().createHamburger();
cheeseHamburger.make();

Pizza beefPizza = new BeefFactory().createPizza();
beefPizza.bake();

Hamburger beefHamburger = new BeefFactory().createHamburger();
beefHamburger.make();
}
}

类图

1

特点

  抽象工厂模式相比于工厂模式,每个抽象工厂不止能生产一个产品。在工厂模式的介绍中,我们使用Pizza距离,其中芝士Pizza工厂可以生产芝士Pizza,牛肉Pizza工厂可以生产牛肉Pizza。如果两个工厂又新增了汉堡的产线,那么就在工厂的接口中再新增一个抽象方法。

  这个设计模式并不好,因为改动太大,需要修改工厂接口类(添加方法),还需要修改每一个工厂的实现类(重写新增的方法)。

总结

  小伙伴们注意理解工厂模式和抽象工厂模式的区别,尽量多使用工厂模式解决问题。

-------------本文结束感谢您的阅读-------------
0%