当前位置: 首页 > 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.dtcms.com/a/280730.html

相关文章:

  • Web应用防火墙(WAF)技术
  • vue实现el-table-column中自定义label
  • 全局 WAF 规则:构筑 Web 安全的坚固防线
  • Git基础概念与常用命令详解
  • x86版的ubuntu上使用qemu运行arm版ubuntu
  • Java项目:基于SSM框架实现的网盘管理系统【ssm+B/S架构+源码+数据库+毕业论文】
  • EMS4100芯祥科技USB3.1高速模拟开关芯片规格介绍
  • iOS高级开发工程师面试——多线程
  • LVS三种模式实战
  • Unity沉浸式/360View/全景渲染
  • 新手向:Python数据处理Excel报表自动化生成与分析
  • Zookeeper入门安装与使用详解
  • Java行为型模式---迭代器模式
  • Linux、Ubuntu和CentOS的关系与区别
  • 设计模式笔记_结构型_适配器模式
  • 3.正则化——新闻分类
  • 生产问题排查-数据库连接池耗尽
  • 牛客:HJ23 删除字符串中出现次数最少的字符[华为机考][字符串]
  • Linux 环境下安装 Node.js v16.13.0 完整指南
  • MongoDB 数据库 启用访问控制
  • Volta现代化的 Node.js 版本管理工具
  • CSRF 攻击原理与实验测试(附可运行测试案例)
  • NineData 社区版 V4.3.0 正式发布!新增 5 条迁移对比链路,全面支持 MariaDB、GaussDB 等数据库
  • [附源码+数据库+毕业论文]基于Spring+MyBatis+MySQL+Maven+vue实现的酒店预订管理系统,推荐!
  • Gitlab跑CICD的时候,maven镜像和pom.xml使用的maven版本冲突导致没办法build成功的解决方法
  • [附源码+数据库+毕业论文+开题报告]基于Spring+MyBatis+MySQL+Maven+jsp实现的车辆运输管理系统,推荐!
  • 2025-7-15-C++ 学习 排序(4)
  • langchain教程10:LCEL
  • 【c++】c++11新特性(右值引用和移动语义)
  • PySpark 常用算子详解