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

简单工厂设计模式

模式定义

简单工厂模式(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.lryc.cn/news/589607.html

相关文章:

  • I/O 多路复用详解笔记
  • JS中async/await功能介绍和使用演示
  • [Dify]--进阶3-- 如何通过插件扩展 Dify 的功能能力
  • 基于华为欧拉系统安装FileGator文件管理器
  • screen -r 2050449 # 重新连接到 run_models 会话
  • saltstack安装部署
  • docker搭建freeswitch实现点对点视频,多人视频
  • vscode里面怎么配置ssh步骤
  • 【PTA数据结构 | C语言版】层序遍历二叉树
  • js分支语句和循环语句
  • 小架构step系列15:白盒集成测试
  • NE综合实验3:链路聚合、VLAN与Trunk、STP、DHCP、OSPF及PPP整合部署
  • 经典排序算法之插入排序
  • 二分查找栈堆
  • 笔试——Day8
  • 力扣经典算法篇-25-反转链表 II(头插法)
  • AI 增强大前端数据加密与隐私保护:技术实现与合规遵
  • 牛客:HJ22 汽水瓶[华为机考][数字处理]
  • C# 网口demo
  • Neo4j Python 驱动库完整教程(带输入输出示例)
  • deepseekAI对接大模型的网页PHP源码带管理后台(可实现上传分析文件)
  • Python初学者笔记第十三期 -- (常用内置函数)
  • RestTemplate 实现后端 HTTP 调用详解
  • python 基于 httpx 的流式请求
  • kube-proxy 中 IPVS 与 iptables
  • Vue 2 和 Vue 3 中,组件的封装、二次开发和优化
  • React源码4 三大核心模块之一:Schedule,scheduleUpdateOnFiber函数
  • react - 根据路由生成菜单
  • 使用SQLMAP的文章管理系统CMS的sql注入渗透测试
  • PostgreSQL 大数据量(超过50GB)导出方案