第12章:模式中的模式(Patterns of Patterns)
一、导读
1.1 本章学习目标
第12章是全书的总结,探讨模式之间的关系、如何组合使用模式、以及何时重构。
1.2 为什么第十二章如此重要
设计模式不是孤立的,它们之间有密切的关系。理解模式之间的关系,才能灵活运用。
1.3 核心问题引导
模式之间有什么关系?
如何组合使用多个模式?
何时应该重构?
设计原则如何总结?
二、核心概念详解
12.1 模式关系
创建型模式:
- 工厂方法 → 抽象工厂(扩展)
- 单例 → 工厂(控制实例化)
结构型模式:
- 装饰者 → 适配器(包装对象)
- 代理 → 装饰者(控制访问 vs 添加行为)
行为型模式:
- 策略 → 状态(选择算法 vs 状态转换)
- 命令 → 策略(封装请求 vs 封装算法)
- 观察者 → 中介者(多对多通信)12.2 模式组合
java
// 策略 + 工厂 + 模板方法
public class PaymentProcessor {
// 工厂:创建支付策略
private PaymentStrategy strategy;
// 模板方法:定义支付流程
public final void process(PaymentRequest request) {
validate(request);
strategy.pay(request);
notify(request);
}
private void validate(PaymentRequest request) { }
private void notify(PaymentRequest request) { }
}12.3 设计原则总结
设计原则:
1. 封装变化
2. 组合优于继承
3. 面向接口编程
4. 为交互设计,而不是为实现设计
5. 最小知识原则
6. 依赖倒置原则
7. 开放-关闭原则
8. 单一职责原则12.4 重构时机
重构信号:
- 重复代码
- 过长的方法
- 过大的类
- 过多的参数
- 过深的嵌套
- 过多的 if-else
- 特性依恋(方法过多使用其他类的数据)三、实战案例
12.1 MVC 中的模式
MVC 架构中的模式:
- Model:观察者模式(通知 View 变化)
- View:组合模式(UI 组件树)
- Controller:策略模式(处理不同请求)
整体:
- 观察者:Model → View
- 组合:View 组件
- 策略:Controller 处理
- 适配器:Controller 适配 Model 和 View四、本章小结
设计模式之间有密切关系。可以组合使用多个模式。遵循设计原则,在出现重构信号时及时重构。
五、思考与练习
模式之间有什么关系?
如何组合使用多个模式?
MVC 中使用了哪些模式?
何时应该重构?
设计原则如何总结?