简单工厂模式
简单工厂模式
模式简介
简单工厂模式是一种创建型设计模式,它提供了一个统一的工厂类,根据传入的参数类型来创建不同的产品实例。客户端只需要与工厂类交互,而不需要直接创建产品对象,从而实现了客户端与具体产品类的解耦。
类结构
simple_factory/
├── Product.java # 产品接口
├── ConcreteProductA.java # 具体产品A
├── ConcreteProductB.java # 具体产品B
├── SimpleFactory.java # 简单工厂类
└── SimpleFactoryTest.java # 测试类
各个类的作用
1. Product.java
- 定义产品的公共接口
- 所有具体产品都必须实现这个接口
- 包含产品的核心业务方法
operation()
2. ConcreteProductA.java
- 实现
Product接口 - 具体产品A的实现类
- 重写
operation()方法,实现产品A特有的功能
3. ConcreteProductB.java
- 实现
Product接口 - 具体产品B的实现类
- 重写
operation()方法,实现产品B特有的功能
4. SimpleFactory.java
- 核心工厂类,负责创建产品实例
- 包含静态方法
createProduct(String type),根据传入的类型参数创建不同的产品 - 集中管理产品的创建逻辑,客户端不需要知道具体产品的创建细节
5. SimpleFactoryTest.java
- 测试类,演示简单工厂模式的使用
- 创建
SimpleFactory实例,调用其createProduct()方法创建不同类型的产品 - 调用产品的
operation()方法验证功能
使用示例
客户端代码示例
// 使用简单工厂创建产品A
Product productA = SimpleFactory.createProduct("A");
productA.operation(); // 输出: ConcreteProductA operation
// 使用简单工厂创建产品B
Product productB = SimpleFactory.createProduct("B");
productB.operation(); // 输出: ConcreteProductB operation
执行流程
- 客户端调用
SimpleFactory.createProduct("A"),传入参数 "A" - 工厂类根据参数 "A",创建
ConcreteProductA实例并返回 - 客户端调用返回的产品实例的
operation()方法 - 客户端再调用
SimpleFactory.createProduct("B"),传入参数 "B" - 工厂类根据参数 "B",创建
ConcreteProductB实例并返回 - 客户端调用返回的产品实例的
operation()方法
运行说明
编译并运行测试类
# 进入简单工厂模式目录
cd simple_factory
# 编译所有Java文件
javac *.java
# 运行测试类
java SimpleFactoryTest
预期输出
ConcreteProductA operation
ConcreteProductB operation
优点
- 实现了客户端与具体产品类的解耦
- 集中管理产品创建逻辑,便于维护和扩展
- 客户端只需要知道产品类型,不需要知道具体实现
缺点
- 工厂类职责过重,违反了单一职责原则
- 新增产品时需要修改工厂类的代码,违反了开闭原则
- 产品类型过多时,工厂类会变得非常复杂
适用场景
- 产品类型较少且相对稳定的场景
- 客户端不需要知道产品创建细节的场景
- 需要集中管理产品创建逻辑的场景
浙公网安备 33010602011771号