1. 简单工厂模式的核心价值
在软件开发中,对象创建是最基础也最频繁的操作。传统方式直接使用new关键字实例化对象看似简单直接,但随着系统复杂度提升,这种硬编码方式会带来严重的维护问题。简单工厂模式通过将对象创建过程封装到独立工厂类中,实现了创建逻辑与业务逻辑的解耦。
关键区别:传统方式是在客户端直接依赖具体实现类,而工厂模式让客户端只依赖抽象接口和工厂,具体实现类的变化不会影响到客户端代码。
我经历过一个电商项目重构,最初商品创建直接new了二十多处。当需要增加商品类型校验时,团队花了整整两周才完成所有修改点的更新和测试。采用工厂模式重构后,类似需求变更只需调整工厂类内部逻辑,半小时就能完成部署。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 传统创建方式的痛点分析
2.1 典型实现代码示例
java复制public class Product {
private String name;
public Product(String name) {
this.name = name;
}
// 其他属性和方法...
}
// 客户端直接创建实例
Product apple = new Product("苹果");
Product orange = new Product("橙子");
2.2 存在的核心问题
- 紧耦合问题:客户端代码直接依赖具体Product实现类,形成编译期依赖
- 修改成本高:当Product构造方式变化时(例如需要添加类型参数),所有new实例的地方都需要修改
- 难以扩展:新增产品类型需要修改客户端代码,违反开闭原则
- 职责不清:对象创建逻辑分散在各处,不利于统一管理
我在实际项目中见过最极端的案例:一个订单系统中有187处直接new了Order对象。当需要增加风控校验时,开发团队不得不进行全量代码审查,生怕漏掉任何一处实例化点。
3. 简单工厂模式实现详解
3.1 模式结构解析

核心角色:
- 抽象产品(Product):定义产品对象的公共接口
- 具体产品(ConcreteProduct):实现抽象产品接口的具体类
- 工厂类(Factory):负责创建产品实例的内部逻辑
3.2 完整代码实现
java复制// 抽象产品接口
public interface Product {
void display();
}
// 具体产品:苹果
public class Apple implements Product {
@Override
public void display() {
System.out.println("这是苹果");
}
}
// 具体产品:橙子
public class Orange i
