Skip to content

Latest commit

 

History

History
54 lines (38 loc) · 2.23 KB

File metadata and controls

54 lines (38 loc) · 2.23 KB
name metaframe-factory-method-pattern
category engineering
description 工厂方法模式 | Code & Engineering

工厂方法模式

英文名: Factory Method Pattern
分类: 编码实践
作者: Gamma, Helm, Johnson, Vlissides, 1994
复杂度: intermediate
成熟度: foundational
AI 相关: ❌ 否

简介

将对象的创建委托给子类决定,使父类无需依赖具体产品类

核心概念

  • 创建者:声明工厂方法的类,通常提供默认实现或调用工厂方法的模板方法
  • 具体创建者:重写工厂方法以生产特定产品,封装实例化细节
  • 产品多态:创建者的逻辑基于产品接口运行,独立于具体产品类型

使用步骤

  1. 定义产品接口:声明所有创建对象必须符合的接口或抽象类
  2. 在创建者中声明工厂方法:在创建者中编写抽象或虚方法,返回产品类型,不指定具体类型
  3. 实现具体创建者:对创建者进行子类化,重写工厂方法以实例化并返回相应的具体产品
  4. 通过接口使用产品:基于产品接口编写创建者的模板业务逻辑,而非依赖具体类型
  5. 动态注册或选择创建者:可选地使用注册表或配置在运行时选择实例化哪个具体创建者

适用场景

['一个类无法预期它必须创建的对象的确切类型,将决定权推迟到子类', '希望让子类控制创建哪些对象,同时共享周围的模板逻辑', '框架需要创建其自身未知但用户已知类型的对象']

最佳实践

✅ 推荐做法

  • 在接口或抽象类上定义工厂方法,使调用方依赖抽象
  • 使用工厂方法封装所有构造复杂性——验证、配置、依赖装配
  • 在支持一等函数的语言中,优先使用工厂函数而非工厂类,以减少样板代码

❌ 避免做法

  • 当简单构造函数足够时,不要使用工厂方法;它只增加间接层而无益处
  • 不要让工厂方法执行 I/O 或网络调用等繁重工作;它应负责组装,而非执行
  • 不要将工厂方法与静态工厂方法混淆——GoF 模式需要通过子类化实现变化

Sources: SDFrame (Software Design) MetaFrame: 💻 Code & Engineering / 编码与工程