工厂模式的核心是将对象创建逻辑集中于工厂函数,构造函数仅负责初始化;工厂根据参数选择构造函数、处理校验与默认配置,并确保返回对象接口统一。

构造函数本身不是工厂模式,但可以在构造函数中结合工厂逻辑来统一创建对象——关键在于把“具体创建哪个实例”的决策权交给工厂函数,而不是在调用处直接 new。
工厂函数封装构造逻辑
不直接暴露多个构造函数,而是提供一个工厂函数,根据参数返回不同类型的实例。这样调用方无需知道具体类名,也避免了重复 new 操作。
- 定义多个构造函数(如 Car、Bike)
- 编写一个工厂函数(如 createVehicle),内部根据 type 参数决定 new 哪个构造函数
- 工厂函数统一处理默认配置、校验、初始化等共性逻辑
构造函数保持专注,不做判断
每个构造函数只负责自身数据的初始化和方法绑定,不关心“该不该被创建”或“创建哪一个”。比如:
- Car 只设置 brand、speed、hasRoof 等自有属性
- Bike 只设置 wheelCount、isElectric 等字段
- 类型判断、参数合法性检查、兜底默认值都由工厂函数完成
支持返回子类实例或配置化对象
工厂函数可进一步增强:接受配置对象,动态组合行为;或返回继承自基类的实例,实现多态。例如:
- 传入 {'type': 'electric', 'range': 300},工厂自动选择 ElectricCar 并注入 range
- 所有返回对象都保证有 .start() 和 .stop() 方法,接口一致
- 避免调用方用 instanceof 判断类型,改用对象是否具备某方法来识别能力
避免常见误区
工厂模式不是“在构造函数里写 if-else 创建不同对象”,那会破坏单一职责;也不是用 class 静态方法伪装工厂。真正规范的做法是:
- 构造函数保持纯净,仅做初始化
- 工厂函数作为唯一创建入口,集中管理对象生命周期起点
- 必要时配合原型链或 mixin 实现行为复用,而非在工厂里复制逻辑
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











