Yunyuzuiluo

简单工厂模式

简单工厂模式

模式简介

简单工厂模式是一种创建型设计模式,它提供了一个统一的工厂类,根据传入的参数类型来创建不同的产品实例。客户端只需要与工厂类交互,而不需要直接创建产品对象,从而实现了客户端与具体产品类的解耦。

类结构

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

执行流程

  1. 客户端调用 SimpleFactory.createProduct("A"),传入参数 "A"
  2. 工厂类根据参数 "A",创建 ConcreteProductA 实例并返回
  3. 客户端调用返回的产品实例的 operation() 方法
  4. 客户端再调用 SimpleFactory.createProduct("B"),传入参数 "B"
  5. 工厂类根据参数 "B",创建 ConcreteProductB 实例并返回
  6. 客户端调用返回的产品实例的 operation() 方法

运行说明

编译并运行测试类

# 进入简单工厂模式目录
cd simple_factory

# 编译所有Java文件
javac *.java

# 运行测试类
java SimpleFactoryTest

预期输出

ConcreteProductA operation
ConcreteProductB operation

优点

  1. 实现了客户端与具体产品类的解耦
  2. 集中管理产品创建逻辑,便于维护和扩展
  3. 客户端只需要知道产品类型,不需要知道具体实现

缺点

  1. 工厂类职责过重,违反了单一职责原则
  2. 新增产品时需要修改工厂类的代码,违反了开闭原则
  3. 产品类型过多时,工厂类会变得非常复杂

适用场景

  1. 产品类型较少且相对稳定的场景
  2. 客户端不需要知道产品创建细节的场景
  3. 需要集中管理产品创建逻辑的场景

posted on 2025-12-17 23:54  刘晋宇  阅读(9)  评论(0)    收藏  举报

导航