先分清原则和模式
单一职责、开闭原则、依赖倒置这些属于设计原则,它们通常在问代码结构应该朝什么方向优化。工厂方法、策略、观察者、模板方法这些属于设计模式,它们通常在问某类场景可以用什么成熟结构解决。
如果题干强调“对扩展开放、对修改关闭”,优先想到开闭原则;如果题干强调“不同算法可以切换”,更像策略模式;如果题干强调“定义算法骨架,子类实现部分步骤”,更像模板方法。
| 题干信号 | 更可能对应 | 一句话判断 |
|---|---|---|
| 一个类承担太多职责 | 单一职责原则 | 类的职责要清楚 |
| 新增功能尽量不改旧代码 | 开闭原则 | 扩展优先于修改 |
| 高层模块不依赖具体实现 | 依赖倒置原则 | 面向抽象编程 |
| 一组算法可替换 | 策略模式 | 把算法封装起来切换 |
| 一对多通知 | 观察者模式 | 状态变化通知依赖对象 |
模式题不要只背类图
类图当然重要,但选择题和案例题更常考模式意图。比如工厂方法不是单纯多一个工厂类,而是把对象创建延迟到子类;抽象工厂强调创建一组相关产品;策略模式强调算法可替换。
老师一般会提醒:模式名背对了只是第一步,真正得分靠场景对得上。场景不对,类图画得再熟也容易选错。
把原则和模式放回代码维护场景
设计原则和模式最终都服务于可维护性。考试如果说“需求变化频繁”“新增类型不希望修改原有代码”“多个算法之间切换”“对象状态变化要通知多个对象”,这些都不是随便描述,它们就是模式选择的信号。
复习时建议每个模式都准备一个真实小例子。比如促销算法适合策略模式,文件解析流程适合模板方法,订阅通知适合观察者。例子越具体,越不容易背混。
相关题目解析
下面这些题目和本专题的判断方法关联较强,适合读完概念后回到具体题干里校验理解。
- 单一职责原则主要强调什么?面向对象设计 / 单一职责原则
- 面向对象设计中的开闭原则是什么意思?面向对象设计 / 开闭原则
- 依赖倒置原则为什么强调依赖抽象?面向对象设计 / 依赖倒置原则
- 抽象工厂模式为什么适合创建一组相关产品?抽象工厂模式 / 产品族
- 模板方法模式适合解决什么问题?设计模式 / 模板方法模式
- 观察者模式适合解决什么问题?观察者模式 / 观察者模式适用场景