10.5.1 设计模式知识点概述
设计模式是对常见设计问题的可复用解决方案。它不是某一种语法,也不是固定代码模板,而是在特定场景下组织类、对象、职责和协作的一套经验。
软件设计师考试中,设计模式属于上午题核心内容,常围绕 GoF 23 种设计模式考分类、英文名称、适用场景、意图和类图识别;下午面向对象程序设计题也会综合使用这些模式。
为什么需要设计模式
没有设计模式时,代码常见问题是“变化一来就到处改”。设计模式的价值在于把变化点隔离出来。
| 设计问题 | 直接写死的后果 | 模式化设计的改进 |
|---|---|---|
| 对象创建过程复杂 | 使用者到处 new 具体类,换产品要改很多地方 | 用创建型模式封装创建过程 |
| 类和对象关系越来越乱 | 新功能靠继承堆子类,类数量膨胀 | 用结构型模式组织组合、适配和访问 |
| 行为变化频繁 | 条件分支越来越多,职责混在一起 | 用行为型模式拆分职责与交互 |
技术或设计方案被替代,通常不是因为旧方案“不能用”,而是因为旧方案在变化成本、复用性、耦合度上越来越难维护。设计模式就是把这些维护成本提前压低。
23种设计模式的三大类
| 分类 | 数量 | 关注点 | 典型问题 |
|---|---|---|---|
| 创建型 | 5 | 对象如何创建 | 谁负责创建对象,如何隐藏具体类,如何控制实例数量 |
| 结构型 | 7 | 类或对象如何组合 | 接口不兼容、整体-部分、动态增强、统一入口、控制访问 |
| 行为型 | 11 | 对象如何分工和交互 | 请求如何传递,算法如何切换,状态如何驱动行为,通知如何联动 |
mermaid
flowchart TB
DP["GoF 23种设计模式"]
DP --> C["创建型:5"]
DP --> S["结构型:7"]
DP --> B["行为型:11"]
C --> C1["Factory Method / Abstract Factory / Builder / Prototype / Singleton"]
S --> S1["Adapter / Bridge / Composite / Decorator / Facade / Flyweight / Proxy"]
B --> B1["Chain / Command / Interpreter / Iterator / Mediator / Memento / Observer / State / Strategy / Template Method / Visitor"]记忆时先记三大类,再记每个模式的一句话意图。不要一开始就背类图细节,因为很多模式的结构有相似处,考试也常允许通过“模式名关键词 + 场景”判断。
考试的四类题型
| 考法 | 题目形式 | 解题重点 |
|---|---|---|
| 场景识别模式 | 给一段应用场景,问用了什么模式 | 抓关键词和变化点 |
| 类图识别模式 | 给类图,问是什么设计模式 | 先找类名,如 Builder、State、Visitor、Command |
| 分类判断 | 问某模式属于创建型/结构型/行为型 | 先背三大类和 5-7-11 数量 |
| 意图匹配 | 给多个意图描述,问哪个属于某模式 | 用“一句话意图”排除相近项 |
课程中特别提醒:类图结构有时并不能唯一确定模式,因此考试中常根据类名、方法名、题干场景综合判断。如果类名与模式名无关,就回到业务场景和变化点。
设计模式识别路径
做题可以按这个顺序:
- 判断它解决的是创建、结构还是行为问题。
- 从题干找关键词:唯一实例、一系列产品、接口转换、动态添加职责、一对多通知、状态改变行为等。
- 如果有类图,先找特殊类名或方法名:
Builder、Director、State、Command、Visitor、accept()、visit()。 - 如果类图没有提示,回到场景:两个独立变化维度常是桥接;数据和操作分离常是访问者。
- 最后用分类排除选项。
三类模式的快速判断
| 问题 | 更可能的分类 | 例子 |
|---|---|---|
| “对象由谁创建?创建过程能否推迟/复用/克隆/控制唯一?” | 创建型 | 工厂方法、抽象工厂、建造者、原型、单例 |
| “已有对象如何组合?接口如何兼容?访问如何控制?” | 结构型 | 适配器、桥接、组合、装饰、外观、享元、代理 |
| “对象之间如何协作?请求如何流转?算法/状态/操作如何变化?” | 行为型 | 观察者、状态、策略、命令、职责链、访问者 |
例题
单例模式属于:
观察者、状态、策略、命令这些模式主要关注对象职责分配和交互,属于:
自查要点
- 创建型、结构型、行为型分别解决什么层次的问题?
- 为什么仅靠类图结构有时不能判断设计模式?
- 设计模式题为什么要同时看英文名、场景和意图?
- 5、7、11 分别对应哪三类模式?