设计模式-09-创建型-总结对比

🏗️ 创建型设计模式 总结与对比

创建型模式关注的是:

如何创建对象,以及何时创建、创建谁、由谁来创建、创建后如何使用,以提高灵活性和可维护性。

🧱 一张总览表

模式名 作用 是否抽象产品? 是否抽象创建? 典型用途
单例模式 确保一个类只有一个实例 配置中心、线程池、缓存、全局管理器
简单工厂模式 根据传参返回不同产品(由工厂判断创建) ❌(逻辑集中) 创建不同支付对象、消息对象等
工厂方法模式 每个产品一个工厂,创建逻辑分散 日志框架(Log4j)、数据库连接等
抽象工厂模式 一组产品族的工厂 跨平台 UI 工厂、支付系统不同渠道下创建组件组合
建造者模式 按步骤构建复杂对象,过程与构造分离 构造复杂订单、Http 请求、Burger 套餐等
原型模式 通过克隆创建对象 ❌(靠 clone) 创建类似对象但仅改动少量字段,性能敏感场景

🧠 使用时重点考虑的问题

你关心的问题 推荐模式 原因说明
只允许创建一个实例? ✅ 单例模式 控制资源使用,全局共享
想屏蔽 new 操作? ✅ 工厂模式(简单工厂、工厂方法) 将对象创建封装在工厂中,调用者无需关系具体实现
创建的对象构造过程复杂? ✅ 建造者模式 按步骤构造,链式调用清晰,避免构造器参数过多问题
创建的是“产品族”? ✅ 抽象工厂模式 一整套相互关联的产品,且产品种类/平台变动频繁
创建的对象几乎一样? ✅ 原型模式 直接克隆已有对象,比重新 new 更高效

🎨 举个统一支付场景串起来:

模式 在支付系统中的应用举例
单例模式 支付配置中心(如支付宝/微信配置,全局唯一)
简单工厂模式 根据参数返回不同支付方式(AliPay、WeChatPay)
工厂方法模式 每种支付方式对应一个工厂(AliPayFactory、WeChatPayFactory)
抽象工厂模式 不同支付渠道(如国内支付、国际支付)下,每个渠道下生产一组组件(配置、签名器、处理器)
建造者模式 构建一笔复杂支付订单(设置支付人、金额、渠道、附加参数等)
原型模式 复制一笔订单对象,快速改个金额或时间重发

✅ 总结小卡片(记忆口诀)

模式名 一句话总结
单例模式 整个系统只要我一个(全局唯一)
简单工厂模式 交给我,我帮你判断该创建谁(集中创建逻辑)
工厂方法模式 每个产品自己有个工厂(创建细化、符合开闭)
抽象工厂模式 一次造一整套(产品族)东西(如手机 + 配件 + UI)
建造者模式 按步骤一步步造,参数清晰流程稳(构建复杂对象)
原型模式 拿现成的复制,改一点再用(高性能克隆)

🔍 创建型模式之间的对比图

模式 是否抽象产品 是否抽象创建逻辑 是否封装构建过程 是否共享实例 关键目的
单例 控制实例数量
简单工厂 用参数选择创建谁
工厂方法 多个产品多个工厂
抽象工厂 ✅(产品族) 创建一组相关对象
建造者 构建步骤复杂的对象
原型 ❌(靠 clone) ✅(复制) 快速复制已有对象

🧠 实战建议

  • 优先从简单工厂 → 工厂方法 → 抽象工厂演进(复杂度升级)
  • 构造复杂对象时考虑建造者;克隆对象考虑原型;
  • 需要控制资源实例唯一性则选择单例;
  • 工厂类多了,记得结合配置 + 反射 + 依赖注入(Spring 框架天然支持工厂注册)
作者

bufx

发布于

2025-07-22

更新于

2025-07-24

许可协议