设计模式-创建型-简单工厂模式(Simple Factory Pattern)

简单工厂模式(Simple Factory Pattern)是一种创建型设计模式,属于工厂模式的简化版本,其核心思想是通过一个工厂类根据传入的参数动态创建不同类型的对象,将对象的实例化过程与客户端代码解耦。以下是该模式的详细解析:


一、核心结构与角色

简单工厂模式包含三个核心组件:

  1. 抽象产品(Product)
    定义所有具体产品的公共接口,例如图形绘制中的 Shape 接口或计算器中的 Operation 类。
  2. 具体产品(Concrete Product)
    实现抽象产品接口的具体类,例如圆形 Circle、矩形 Rectangle 或加法运算 AddOperation
  3. 工厂类(Factory)
    提供一个静态方法(如 createProduct()),根据输入参数(如类型标识符)决定实例化哪种具体产品。

示例结构(以图形工厂为例):

┌─────────────┐       ┌─────────────┐
│   Factory   │─────▶ │  Product    │
└─────────────┘       └─────────────┘
       ▲                  ▲    ▲
       │                  │    │
       │           ┌──────┘    └──────┐
       │           │                 │
┌─────────────┐  ┌─────────┐  ┌──────────┐
│ Client Code │  │ Circle  │  │ Rectangle│
└─────────────┘  └─────────┘  └──────────┘

二、工作流程

  1. 客户端调用工厂类,传入参数(如 type="circle")。
  2. 工厂类解析参数,通过条件判断(如 switch-case)创建对应的具体产品实例。
  3. 返回产品实例,客户端通过抽象接口调用其方法,无需关心具体实现([6] [7])。

典型场景案例(计算器实现):

  • 抽象产品:定义运算接口 Operation,包含 calculate() 方法。
  • 具体产品:实现加法 Add、减法 Subtract 等类。
  • 工厂类:根据运算符(如 +-)返回对应的运算实例([7] [21])。

三、优缺点分析

优点
  • 解耦对象创建与使用:客户端仅依赖抽象接口,降低耦合。
  • 简化代码维护:将创建逻辑集中到工厂类,修改时无需改动客户端。
  • 符合单一职责原则:工厂类专注于对象创建。
缺点
  • 违反开闭原则:新增产品需修改工厂类的逻辑(如添加 case 分支)。
  • 工厂类臃肿:产品类型过多时,工厂方法会变得复杂。
  • 静态方法限制扩展:无法通过继承重写工厂方法。

四、适用场景

  1. 对象种类较少:例如系统仅需支持有限的图形类型或运算。
  2. 客户端不关心创建细节:只需通过参数获取对象(如配置文件读取器)。
  3. 快速原型开发:适用于逻辑简单的临时性代码。

五、与其他模式的对比

  • 工厂方法模式:通过子类化工厂解决开闭原则问题,但引入更多类。
  • 抽象工厂模式:用于创建产品族(如跨平台UI组件),而非单一产品。
  • 策略模式:行为型模式,关注算法替换,与简单工厂的创建目标不同。

六、实现示例(简化代码逻辑)

// 抽象产品
interface Shape {
    void draw();
}

// 具体产品
class Circle implements Shape {
    @Override public void draw() { System.out.println("绘制圆形"); }
}

// 工厂类
class ShapeFactory {
    public static Shape createShape(String type) {
        if ("circle".equals(type)) return new Circle();
        // 扩展其他类型...
        throw new IllegalArgumentException("未知类型");
    }
}

// 客户端
public class Client {
    public static void main(String[] args) {
        Shape shape = ShapeFactory.createShape("circle");
        shape.draw(); // 输出:绘制圆形
    }
}

七、总结

简单工厂模式通过封装对象创建过程,简化了客户端代码,适用于小型系统或固定产品类型的场景。然而,其扩展性不足的问题需要通过工厂方法模式或抽象工厂模式进一步优化。实际开发中应根据需求权衡选择

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值