| name | metaframe-factory-method-pattern |
|---|---|
| category | engineering |
| description | 工厂方法模式 | Code & Engineering |
英文名: Factory Method Pattern
分类: 编码实践
作者: Gamma, Helm, Johnson, Vlissides, 1994
复杂度: intermediate
成熟度: foundational
AI 相关: ❌ 否
将对象的创建委托给子类决定,使父类无需依赖具体产品类
- 创建者:声明工厂方法的类,通常提供默认实现或调用工厂方法的模板方法
- 具体创建者:重写工厂方法以生产特定产品,封装实例化细节
- 产品多态:创建者的逻辑基于产品接口运行,独立于具体产品类型
- 定义产品接口:声明所有创建对象必须符合的接口或抽象类
- 在创建者中声明工厂方法:在创建者中编写抽象或虚方法,返回产品类型,不指定具体类型
- 实现具体创建者:对创建者进行子类化,重写工厂方法以实例化并返回相应的具体产品
- 通过接口使用产品:基于产品接口编写创建者的模板业务逻辑,而非依赖具体类型
- 动态注册或选择创建者:可选地使用注册表或配置在运行时选择实例化哪个具体创建者
['一个类无法预期它必须创建的对象的确切类型,将决定权推迟到子类', '希望让子类控制创建哪些对象,同时共享周围的模板逻辑', '框架需要创建其自身未知但用户已知类型的对象']
- 在接口或抽象类上定义工厂方法,使调用方依赖抽象
- 使用工厂方法封装所有构造复杂性——验证、配置、依赖装配
- 在支持一等函数的语言中,优先使用工厂函数而非工厂类,以减少样板代码
- 当简单构造函数足够时,不要使用工厂方法;它只增加间接层而无益处
- 不要让工厂方法执行 I/O 或网络调用等繁重工作;它应负责组装,而非执行
- 不要将工厂方法与静态工厂方法混淆——GoF 模式需要通过子类化实现变化
Sources: SDFrame (Software Design) MetaFrame: 💻 Code & Engineering / 编码与工程