设计模式
在企业项目中,绝大多数设计模式不会孤立使用,通常是组合使用来解决不同维度问题。我们只关注高频模式:
- 创建型:单例、工厂方法、建造者
- 结构型:代理、装饰器、外观、适配器
- 行为型:策略、模板方法、观察者、责任链、状态
1️⃣ 创建型模式组合
| 模式 | 实战用途 | 组合示例 |
|---|---|---|
| 单例模式 | 全局服务、工具类、ID生成器、线程池 | 单例 + 工厂(策略工厂、服务工厂) |
| 工厂方法模式 | 对象实例化解耦、策略选择 | 工厂 + 策略 → 支付方式、消息处理 |
| 建造者模式 | 复杂对象初始化(DTO/VO、请求构建器) | 建造者 + 工厂 → 统一对象构建 建造者 + 模板方法 → 封装复杂流程输入 |
2️⃣ 结构型模式组合
| 模式 | 实战用途 | 组合示例 |
|---|---|---|
| 代理模式 | 权限控制、缓存、事务、远程调用 | 代理 + 装饰器 → 多层增强 代理 + 外观 → 对外提供统一接口 |
| 装饰器模式 | 动态功能增强(日志、权限、缓存包装) | 装饰器 + 策略 → 动态业务扩展 |
| 外观模式 | 复杂子系统统一接口、模块聚合 | 外观 + 策略 → 统一入口 + 动态选择 外观 + 责任链 → 流程控制 |
| 适配器模式 | 第三方接口/库适配、不同系统接口兼容 | 适配器 + 工厂 → 多接口创建统一对象 适配器 + 策略 → 可配置适配不同规则 |
3️⃣ 行为型模式组合
| 模式 | 实战用途 | 组合示例 |
|---|---|---|
| 策略模式 | 动态业务逻辑切换(支付方式、优惠策略) | 策略 + 工厂 → 工厂生成具体策略实例 策略 + 模板方法 → 封装固定流程 + 可变策略 |
| 模板方法模式 | 固定流程 + 可变步骤(批处理任务、审批流程) | 模板方法 + 策略 → 流程固定 + 步骤可变 模板方法 + 责任链 → 流程执行链 |
| 观察者模式 | 事件驱动、异步通知 | 观察者 + 责任链 → 事件逐层处理 观察者 + 代理 → 异步日志/权限通知 |
| 责任链模式 | 请求处理链、校验链、操作链 | 责任链 + 模板方法 → 流程拆分为链式处理 责任链 + 策略 → 动态决策 + 链式处理 |
| 状态模式 | 对象状态管理(订单状态机、工作流) | 状态 + 策略 → 不同状态对应不同策略 状态 + 责任链 → 状态动作顺序执行 |
4️⃣ 企业项目实战组合示例
🔹 支付系统
Controller
└─ PaymentFacade (外观)
└─ PaymentServiceTemplate (模板方法)
└─ PaymentStrategyFactory (策略 + 工厂)
└─ ValidationChain (责任链)1
2
3
4
5
2
3
4
5
说明:
- 外观提供统一接口
- 模板方法封装支付流程
- 策略 + 工厂选择具体支付方式
- 责任链处理校验、风控、通知等
🔹 消息通知系统
Controller
└─ MessageServiceProxy (代理)
└─ MessageServiceImpl
└─ EventPublisher (观察者)
└─ EmailListener / SMSListener / AppPushListener1
2
3
4
5
2
3
4
5
说明:
- 代理控制权限和异步逻辑
- 观察者实现事件订阅、通知多渠道
- 可扩展添加更多 Listener(装饰器模式可包装功能)
🔹 订单状态管理
OrderController
└─ OrderService
└─ OrderStateContext (状态)
└─ Strategy: 状态变更策略
└─ Chain: 状态动作责任链1
2
3
4
5
2
3
4
5
说明:
- 状态模式管理订单不同状态
- 每个状态对应不同策略处理
- 责任链执行状态动作(库存扣减、通知、日志)
🔹 文件处理系统
FileController
└─ FileFacade (外观)
└─ FileValidationChain (责任链)
└─ FileProcessingTemplate (模板方法)
└─ FileProcessingStrategyFactory (策略 + 工厂)
└─ FileServiceProxy (代理)1
2
3
4
5
6
2
3
4
5
6
说明:
- 外观统一文件处理接口
- 责任链处理前置校验
- 模板方法控制处理流程
- 策略 + 工厂实现不同类型文件处理
- 代理实现权限和日志记录
🔹 配置与工具管理
ConfigController
└─ ConfigService (单例)
└─ ConfigFactory (工厂)
└─ ConfigBuilder (建造者)1
2
3
4
2
3
4
说明:
- 单例 + 工厂管理全局配置实例
- 建造者构建复杂配置对象
- 保证配置统一管理、可扩展性好
5️⃣ 核心总结
企业项目高频模式:
- 创建型:单例、工厂方法、建造者
- 结构型:代理、装饰器、外观、适配器
- 行为型:策略、模板方法、观察者、责任链、状态
模式组合原则:
- 控制层 → 外观 + 代理
- 业务层 → 策略 + 模板方法 + 责任链 + 状态
- 对象创建 → 工厂 + 建造者 + 单例
实践经验:
- 先用高频模式满足核心需求,低频模式(访问者、解释器、桥接等)除非必要不使用
- Spring 框架天然支持代理、观察者、单例等模式
- 模式组合应服务于业务流程,而非单纯炫技