工厂方法模式
模式描述
工厂方法模式(Factory Method),定义一个用于创建对象的接口,让子类决定实例化哪一个类,使得一个类的实例化延迟到其子类。
优点
- 给子类创建对象预留扩展点;
- client 通过 Creator 间接创建对象;
缺点
- Creator 实现变多;
应用场景
- 一个类希望由它的子类来创建对象时;
- 一个类不知道创建对象的类时;
DATE | CHANGELOG |
---|---|
2023年4月24日 | 初始化 |
2023年4月30日 | 添加 Go 语言实现 |
UML 类图
classDiagram
class Creator {
<<abstract>>
getProduct() Product
}
class ConcreteCreator {
getProduct() Product
}
Creator <|-- ConcreteCreator
class Product {
<<interface>>
handle()
}
class ConcreteProduct {
handle()
}
Product <|.. ConcreteProduct
ConcreteCreator <-- Product
Creator <-- Client
参与者
Product 接口
- 定义工厂方法创建对象的接口。
ConcreteProduct 类
- Produce 接口的实现。
Creator 抽象类
- 声明一个抽象工厂方法,返回默认的 Product 对象。
ConcreteCreator 类
- Creator 抽象类的实现,返回自定义 Product 对象。
Client 类
- 使用客户端。
数据流
- client 创建一个 Creator;
- client 调用 Creator 提供的方法来返回 ConcreteProduct。
相关模式
- 抽象工厂模式(Abstract Factory)经常用工厂方法实现;
- 工厂方法通常在模板方法中被调用;
补充
- 基本的工厂方法中,一个 ConcreteProduct 对应一个 ConcreteCreator 的具体实现;
- 可以通过参数化的方式,来将 ConcreteProduct 分类;