模式概述
简单工厂模式(Simple Factory Pattern)通过一个工厂类根据传入的参数来动态的创建不同类型对象,将对象的实例化与客户端代码解耦。属于创建型模式,适用于产品类型有限且不频繁变化的场景。
简单代码示例
// 1. 抽象产品接口
interface Product {
void use();
}
// 2. 具体产品实现
class ConcreteProductA implements Product {
@Override
public void use() {
System.out.println("Using Product A");
}
}
class ConcreteProductB implements Product {
@Override
public void use() {
System.out.println("Using Product B");
}
}
// 3. 简单工厂类
class SimpleFactory {
public Product createProduct(String type) {
if ("A".equalsIgnoreCase(type)) {
return new ConcreteProductA();
} else if ("B".equalsIgnoreCase(type)) {
return new ConcreteProductB();
}
throw new IllegalArgumentException("Invalid product type: " + type);
}
}
// 4. 使用示例
public class Test{
public static void main(String[] args) {
SimpleFactory factory = new SimpleFactory();
// 创建产品A
Product productA = factory.createProduct("A");
productA.use(); // 输出: Using Product A
// 创建产品B
Product productB = factory.createProduct("B");
productB.use(); // 输出: Using Product B
}
}
技术细节
1. 模式组成
组件 | 职责说明 |
---|---|
Product | 抽象产品接口,定义产品的公共方法(如 use()) |
ConcreteProductA/B | 具体产品类,实现产品接口的业务逻辑 |
SimpleFactory | 工厂类,根据输入参数创建对应的产品实例 |
2. 优点与缺点
优点:
- 解耦工厂和具体产品类
- 集中化对象创建逻辑,便于维护
- 符合单一职责原则
缺点:
- 违反开闭原则(新增产品需修改工厂类)
- 静态类没有办法被继承
- 工厂类职责过重,产品过多时逻辑复杂
扩展建议
- 配置文件扩展:通过读取配置文件实现产品类型的动态配置。
- 枚举优化:使用枚举类型替代字符串参数或者枚举中配置参数。