当前位置: 首页 > ds >正文

简单工厂设计模式

模式定义

简单工厂模式(Simple Factory Pattern)是一种创建型设计模式,通过工厂类统一创建对象实例,客户端无需直接实例化具体类。该模式包含三个核心组件:

  1. 抽象产品(Product):定义产品接口
  2. 具体产品(ConcreteProduct):实现接口的具体类
  3. 工厂类(Factory):根据输入创建具体产品实例
UML类图
+----------------+       +-------------------+       +-----------------+
|   <<接口>>     |       |      Factory      |       |   ConcreteProdA |
|   Product      |<------|-------------------|------>|-----------------|
+----------------+       | +createProduct()  |       | +operation()    |
| +operation()   |       +-------------------+       +-----------------+
+----------------+                  ▲▲                         ||                         |       +-----------------+|                         +------>|   ConcreteProdB ||                                 |-----------------|+---------------------------------| +operation()    |+-----------------+

代码实现
// 1. 抽象产品接口
interface Product {void operation();
}// 2. 具体产品实现
class ConcreteProdA implements Product {@Overridepublic void operation() {System.out.println("执行产品A的操作");}
}class ConcreteProdB implements Product {@Overridepublic void operation() {System.out.println("执行产品B的操作");}
}// 3. 工厂类
class SimpleFactory {public Product createProduct(String type) {switch(type.toUpperCase()) {case "A": return new ConcreteProdA();case "B": return new ConcreteProdB();default: throw new IllegalArgumentException("无效的产品类型");}}
}// 4. 客户端使用
public class Client {public static void main(String[] args) {SimpleFactory factory = new SimpleFactory();Product productA = factory.createProduct("A");productA.operation();  // 输出: 执行产品A的操作Product productB = factory.createProduct("B");productB.operation();  // 输出: 执行产品B的操作}
}

核心优势
  1. 解耦对象创建

    • 客户端只需知道产品接口,无需了解具体实现类
    • 符合迪米特法则:减少对象间的依赖
  2. 集中控制

    • 创建逻辑封装在工厂类中,便于统一管理
    • 修改产品创建逻辑只需调整工厂类
  3. 可扩展性

    • 新增产品类型时,只需扩展工厂类(需修改工厂代码)
适用场景
  1. 产品类型有限且不频繁变化
  2. 客户端不关心具体实现类
  3. 需要统一管理对象创建逻辑
  4. 系统需要动态选择产品实现
局限性分析
  1. 违反开闭原则

    • 新增产品类型需修改工厂类代码
  2. 工厂职责过重

    • 所有创建逻辑集中在一个类中
    • 产品类型过多时工厂类会臃肿
  3. 类型安全风险

    • 依赖字符串/枚举标识产品类型
    • 错误类型导致运行时异常
模式演进

当产品类型频繁变化时,可考虑:

  1. 工厂方法模式:将创建延迟到子类
  2. 抽象工厂模式:创建产品族
  3. 依赖注入:通过容器管理对象创建
最佳实践建议
  1. 结合枚举类型避免字符串错误:
enum ProductType { A, B }class EnhancedFactory {public Product createProduct(ProductType type) {switch(type) {case A: return new ConcreteProdA();case B: return new ConcreteProdB();}}
}

  1. 使用静态工厂方法简化调用:
class StaticFactory {public static Product createA() { return new ConcreteProdA(); }
}

总结:简单工厂模式是创建型模式的入门设计,适用于产品类型固定且创建逻辑简单的场景。其核心价值在于分离使用与创建,但需注意在复杂场景下向更灵活的模式演进。

http://www.xdnf.cn/news/15599.html

相关文章:

  • QT 中各种坑
  • 算法学习day16----Python数据结构--模拟队列
  • haproxy负载均衡
  • 【雅思播客016】New Year Resolution 新年决心
  • vue实现el-table-column中自定义label
  • 深入理解C++11 std::iota:从原理到实践
  • Oracle日期时间函数说明及与MySql区别说明
  • 028_分布式部署架构
  • lanch4j将jar转成exe
  • Mac IDEA启动报错:Error occurred during initialization of VM
  • WPF中的ListBox详解
  • 国内第一梯队终端安全产品解析:技术与场景实践
  • 分布式存储之Ceph使用指南--部署篇(未完待续)
  • CSS `:root` 伪类深入讲解
  • 7.14 Java基础|String 和StringBuilder
  • 系统思考:跨境跨界团队学习
  • Vim库函数
  • 图像修复:深度学习GLCIC神经网络实现老照片划痕修复
  • Sharding-Sphere学习专题(三)数据加密、读写分离
  • AI 临床医学课题【总结】
  • WIFI MTU含义 ,协商修改的过程案例分析
  • 《大数据技术原理与应用》实验报告三 熟悉HBase常用操作
  • 《大数据技术原理与应用》实验报告二 熟悉常用的HDFS操作
  • LeetCode|Day11|557. 反转字符串中的单词 III|Python刷题笔记
  • 理解:进程、线程、协程
  • autoware激光雷达和相机标定
  • 【ASP.NET Core】内存缓存(MemoryCache)原理、应用及常见问题解析
  • 2025 春秋杯夏季个人挑战赛 Web
  • 【解决办法】越疆Dobot CR5 桌面客户端DobotStudio Pro连不上机器人
  • docker简介