1. 简单工厂模式的核心价值
在软件开发中,对象创建是最基础也最频繁的操作。传统方式直接使用new关键字实例化对象,虽然简单直接,但会带来几个显著问题:一是客户端代码与具体实现类高度耦合,二是创建逻辑分散在各处难以维护,三是当需要修改或扩展时牵一发而动全身。
简单工厂模式通过引入一个专门的工厂类来封装对象的创建过程。这个模式最精妙之处在于,它让客户端只需要知道"要什么",而不需要关心"怎么造"。就像我们去餐厅点餐,只需要告诉服务员菜名,后厨如何准备食材、烹饪的过程对顾客完全透明。
重要提示:简单工厂模式虽然名为"工厂",但它并不属于GoF定义的23种经典设计模式,而是一种更基础的编程习惯(idiom)。但这丝毫不影响它在实际项目中的广泛应用价值。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 模式结构与实现原理
2.1 经典UML结构解析
简单工厂模式包含三个核心角色:
- 工厂类(Factory):整个模式的核心,负责根据输入参数创建对应的产品对象
- 抽象产品(Product):定义产品的公共接口,可以是接口或抽象类
- 具体产品(ConcreteProduct):实现抽象产品接口的具体类
java复制// 抽象产品
interface Product {
void operation();
}
// 具体产品A
class ConcreteProductA implements Product {
@Override
public void operation() {
System.out.println("Product A operation");
}
}
// 具体产品B
class ConcreteProductB implements Product {
@Override
public void operation() {
System.out.println("Product B operation");
}
}
// 简单工厂
class SimpleFactory {
public static Product createProduct(String type) {
switch (type) {
case "A":
return new ConcreteProductA();
case "B":
return new ConcreteProductB();
default:
throw new IllegalArgumentException("Unknown product type");
}
}
}
2.2 创建逻辑的隐藏机制
工厂类的createProduct方法内部通常采用条件判断(如if-else或switch)来决定实例化哪个具体类。这个判断逻辑对客户端完全不可见,客户端只需要传入一个标识参数。这种隐藏带来了几个好处:
- 降低耦合:客户端代码只依赖抽象产品接口,不与任何具体实现类耦合
- 集中控制:所有创建逻辑集中在工厂类中,修改时只需改动一处
- 简化调用:客户端代码变得更加简洁清晰,不需要关心复杂的创建过程
