设计模式之 工厂模式(工厂方法、抽象工厂) 正式版
定义:工厂模式(Factory Pattern)是设计模式中的一种,它属于创建型模式,主要用来创建对象。
工厂模式的核心思想是定义一个用于创建对象的接口,让子类决定实例化哪一个类。 通过使用工厂模式,
可以将对象的创建过程封装到工厂类中,客户端只需要关心对象的使用,而不需要关心如何创建该对象。
工厂方法模式(Factory Method)
工厂方法模式是工厂模式的一种常见实现方式,它通过定义一个创建产品的接口,让子类去实现具体的工厂方法,从而实现对象的创建。
主要角色:
- Product:产品接口,定义了产品的规范。
- ConcreteProduct:具体的产品类,实现了产品接口。
- Creator:创建者接口,声明了工厂方法。
- ConcreteCreator:具体的创建者类,重写工厂方法,返回具体的产品对象。
示例代码: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// 产品接口
interface Product {
void create();
}
// 具体产品A
class ConcreteProductA implements Product {
public void create() {
System.out.println("Creating Product A");
}
}
// 具体产品B
class ConcreteProductB implements Product {
public void create() {
System.out.println("Creating Product B");
}
}
// 工厂接口
interface Creator {
Product createProduct();
}
// 具体工厂A
class ConcreteCreatorA implements Creator {
public Product createProduct() {
return new ConcreteProductA();
}
}
// 具体工厂B
class ConcreteCreatorB implements Creator {
public Product createProduct() {
return new ConcreteProductB();
}
}
// 客户端代码
public class Main {
public static void main(String[] args) {
Creator creatorA = new ConcreteCreatorA();
Product productA = creatorA.createProduct();
productA.create();
Creator creatorB = new ConcreteCreatorB();
Product productB = creatorB.createProduct();
productB.create();
}
}
抽象工厂模式(Abstract Factory)
抽象工厂模式是工厂模式的进一步扩展。它不仅提供一个创建单一产品的方法,还可以创建一系列相关或相互依赖的产品。
抽象工厂模式会定义多个工厂方法,用于创建一族产品。
主要角色:
- AbstractFactory:抽象工厂,定义了创建一族产品的抽象方法。
- ConcreteFactory:具体工厂,实现了创建具体产品的方法。
- AbstractProduct:抽象产品,定义了产品的通用接口。
- ConcreteProduct:具体产品,实现了抽象产品接口。
- Client:客户端使用工厂方法来创建产品。
1 | // 抽象产品A |
工厂模式的优缺点
优点:
- 封装性好:客户端不需要知道具体的产品类,只需要与工厂接口进行交互,遵循了“依赖抽象,不依赖具体”的原则。
- 解耦合:创建产品的过程被工厂类封装,客户端代码与具体的产品类解耦。
- 扩展性强:如果需要增加新产品,只需要扩展工厂类和产品类,不需要修改客户端代码。
缺点:
- 类的个数增加:每增加一个产品就需要增加一个具体工厂类,可能会使系统变得复杂。
- 不适用于所有场景:当产品种类较少时,工厂模式可能会显得过于复杂。
产品等级结构与产品族
产品等级结构:产品等级结构即产品的继承结构,如一个抽象类是电视机,其子类有海尔电视机、海信电视机、TCL电视机,则抽象电视机与具体品牌的电视机之间构成了一个产品等级结构。
产品族:在抽象工厂模式中,产品族是指由同一个工厂生产的,位于不同产品等级结构中的一组产品,如海尔电器工厂生产的海尔电视机、海尔电冰箱。海尔电视机、海尔电冰箱构成了一个产品族。
如果您觉得这篇博客对您有所帮助,欢迎分享给更多人。如果您发现博客中使用的图片存在版权问题,请及时联系作者,我们将尽快处理并删除相关内容。感谢您的支持!