简单工厂模式
1/20/24About 3 min
简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。又称为静态工厂模式。简单工厂模式是工厂模式家族中最简单实用的。

简单工厂模式包含以下主要角色:
- 工厂类(SimpleFactory): 这个类包含创建所有产品的逻辑。。
- 抽象产品类(AbstractProduct):定义某类产品的属性和行为。
- 产品类(Product):抽象产品类的实现,定义具体产品的属性和行为。
代码实现
工厂类
public class SimpleFactory {
public static AbstractProduct createProduct(String name) {
return switch (name) {
case "A" -> new ProductA();
case "B" -> new ProductB();
default -> throw new IllegalArgumentException("Invalid product name");
};
}
}该类通过输入相应的指令,可以创建对应的对象(产品类),产品类需要为AbstractProduct的子类。
抽象产品类
public abstract class AbstractProduct {
public abstract void work();
}定义抽象类AbstractProduct,并定义产品的通用行为work()。
具体产品类
public class ProductA extends AbstractProduct {
@Override
public void work() {
System.out.println("ProductA work");
}
}开始生产
下面我们调用工厂进行生产,并使用产品进行工作。
public class Client {
public static void main(String[] args) {
AbstractProduct productA = SimpleFactory.createProduct("A");
productA.work();
AbstractProduct productB = SimpleFactory.createProduct("B");
productB.work();
}
}与其他设计模式的对比
简单工厂模式 vs 工厂方法模式
| 特性 | 简单工厂模式 | 工厂方法模式 |
|---|---|---|
| 工厂数量 | 一个工厂类 | 每个产品对应一个工厂类 |
| 扩展性 | 差,添加新产品需要修改工厂类 | 好,添加新产品只需要添加新的工厂类 |
| 开闭原则 | 违反 | 遵循 |
| 复杂度 | 低 | 中 |
| 适用场景 | 产品种类较少且变化不大 | 产品种类较多且可能扩展 |
简单工厂模式 vs 抽象工厂模式
| 特性 | 简单工厂模式 | 抽象工厂模式 |
|---|---|---|
| 创建对象类型 | 单个产品 | 产品家族 |
| 工厂接口 | 无抽象工厂接口 | 有抽象工厂接口 |
| 产品关系 | 独立产品 | 相关或相互依赖的产品 |
| 扩展性 | 差 | 较好,但扩展产品家族困难 |
| 适用场景 | 单一产品创建 | 产品家族创建 |
总结
优点:
- 封装了对象的创建过程,客户端不需要知道具体类名
- 客户端不需要关心对象的创建细节,只需要知道参数即可
- 实现了客户端与产品类的解耦
缺点:
- 违背了开闭原则,如果需要添加新的产品,需要修改工厂类
- 工厂类的职责过重,所有产品的创建都集中在一个类中
- 产品类型过多时,工厂类会变得非常复杂
适用场景:
- 产品种类较少且变化不大的情况
- 客户端不需要知道产品创建的细节
- 需要集中管理产品创建的场景