本页目录 · 9 节
- 一、分值定位
- 二、GoF 23 种设计模式
- 2.1 三大类划分(按目的)
- 2.2 模式识别关键词表(考前必背,考场上直接对号)
- 2.3 最容易混的三组
- 三、软件设计四活动与结构化设计
- 3.1 软件设计四活动(顺序与产出)
- 3.2 耦合(由低到高,越低越好)
- 3.3 内聚(由高到低,越高越好)
- 3.4 信息隐蔽与抽象
- 四、UML 与建模
- 4.1 图的两大类(先分类再选图,答题不跑偏)
- 4.2 高频图—用途对照
- 4.3 用例三种关系(必考)
- 4.4 SysML
- 4.5 DDD(领域驱动设计)
- 五、跨年真题定位索引
- 六、典型陷阱
- 七、答题模板
- 模板 A:案例"补全 UML 图"
- 模板 B:案例"识别应采用的模式"(30 秒)
- 模板 C:论文"论面向对象的建模"
- 八、自测清单
- 九、来源与可信度
知识域 04 · 设计模式、软件设计与 UML 建模#
题号指向 ../01-年份索引/<年份>-套卷.md。标记:〔核〕/〔推〕/〔存疑〕。
一、分值定位#
| 科目 | 频率 | 形态 |
|---|
| 综合知识 | 每套 3—6 题 | 模式分类与识别、UML 图与关系、耦合内聚、设计四活动、信息隐蔽 |
| 案例分析 | 中高频(UML 建模是"送分选做题") | 用例图关系判断、顺序图补全、类图/实体识别 |
| 论文 | 中频(2023 下论文三"论面向对象的建模及应用") | 需一套 UML 建模素材 |
这个域性价比极高:模式识别靠"关键词映射表"秒杀,UML 靠"图—用途"对应表秒杀,几乎没有推理成本。
二、GoF 23 种设计模式#
2.1 三大类划分(按目的)#
| 类别 | 关注点 | 成员(加粗为高频) |
|---|
| 创建型(5) | 对象的创建过程 | Factory Method、Abstract Factory、Builder、Prototype、Singleton |
| 结构型(7) | 类/对象的组合结构 | Adapter、Bridge、Composite、Decorator、Facade、Flyweight、Proxy |
| 行为型(11) | 对象间的职责分配与交互 | Chain of Responsibility、Command、Interpreter、Iterator、Mediator、Memento、Observer、State、Strategy、Template Method、Visitor |
母题(2018 下 54—57,〔推〕答案 D、A、B、A):
抽象工厂 → 创建型;将抽象部分与实现部分分离(Bridge)→ 结构型;"将一个请求封装为一个对象,可用不同请求对客户参数化、支持撤销" → Command。
2.2 模式识别关键词表(考前必背,考场上直接对号)#
| 题干关键词 | 答案 |
|---|
| 保证一个类只有一个实例,提供全局访问点 | Singleton |
| 定义一个创建对象的接口,由子类决定实例化哪个类 | Factory Method |
| 创建一系列相关/相互依赖的对象,无需指定具体类 | Abstract Factory |
| 复杂对象的分步构造,同一构造过程可造不同表示 | Builder |
| 通过复制原型创建新对象(克隆) | Prototype |
| 将一个类的接口转换成客户希望的另一个接口 | Adapter |
| 将抽象部分与实现部分分离,使二者独立变化 | Bridge |
| 树形结构,对单个对象和组合对象一致对待 | Composite |
| 动态地给对象添加职责(比继承更灵活) | Decorator |
| 为子系统提供统一的高层接口,简化使用 | Facade |
| 大量细粒度对象共享以降低内存 | Flyweight |
| 为其他对象提供代理以控制访问(远程/虚/保护/智能引用) | Proxy |
| 将请求的发送者与接收者解耦,多个对象都有机会处理 | Chain of Responsibility |
| 将请求封装为对象,支持参数化、排队、日志、撤销 | Command |
| 给定语言,定义其文法表示与解释器 | Interpreter |
| 顺序访问聚合对象元素而不暴露内部表示 | Iterator |
| 用中介对象封装对象间交互,降低耦合 | Mediator |
| 捕获并保存对象内部状态,以便之后恢复(撤销) | Memento |
| 一对多依赖,一变化则多得到通知并自动更新 | Observer |
| 对象内部状态改变时改变其行为 | State |
| 定义一系列可互换的算法,使算法独立于客户变化 | Strategy |
| 父类定义算法骨架,将某些步骤延迟到子类 | Template Method |
| 在不改变类的前提下为对象结构中的元素增加新操作 | Visitor |
真题:2026 上 7/42、2025 下 37/50、2024 下 21、2024 上 18、2020 下 54—58、2019 下 54—57、2018 下 54—57。
2.3 最容易混的三组#
| 组 | 区分口径 |
|---|
| Strategy vs State | Strategy 由客户选择算法;State 由对象自身状态驱动行为变化 |
| Adapter vs Bridge | Adapter 事后适配已存在的接口;Bridge 事前设计,抽象与实现双维度独立扩展 |
| Decorator vs Proxy | Decorator 目的是增强功能、可多层嵌套;Proxy 目的是控制访问、通常一层 |
| Facade vs Mediator | Facade 是单向简化调用;Mediator 是多向协调同事对象 |
三、软件设计四活动与结构化设计#
3.1 软件设计四活动(顺序与产出)#
| 活动 | 目标 | 关键词 |
|---|
| 数据设计 | 把分析模型的数据对象转化为数据结构 | "改善程序结构与模块划分、降低过程复杂性"←数据设计(2018 下 32) |
| 体系结构设计(软件结构设计) | 开发模块化的程序结构,表示模块间控制关系 | 模块结构图、层次图、HIPO 图 |
| 接口设计(人机界面设计) | 描述软件与用户之间、软件与外部系统之间的交互 | 界面、协议 |
| 过程设计 | 把结构元素转化为过程性描述 | 流程图、PAD、伪代码、盒图(N-S) |
母题(2018 下 32—34,〔推〕答案 B、A、D):数据设计 / 软件结构设计 / 人机界面设计。
概要设计常用工具(2018 下 31,〔推〕答案 C):模块结构图、层次图、HIPO 图——"程序流程图/PAD/伪代码"属详细设计。
3.2 耦合(由低到高,越低越好)#
非直接耦合 < 数据耦合 < 标记耦合 < 控制耦合 < 外部耦合 < 公共耦合 < 内容耦合
| 类型 | 含义 | 例 |
|---|
| 数据耦合 | 只传简单数据参数 | 传 int |
| 标记耦合 | 传整个数据结构,但只用其中部分 | 传 record 只用一字段 |
| 控制耦合 | 传控制信号(开关量) | 传 flag 决定分支 |
| 公共耦合 | 通过全局数据区共享 | 全局变量 |
| 内容耦合 | 一个模块直接访问另一模块内部 | 改别人内部数据 |
3.3 内聚(由高到低,越高越好)#
功能内聚 > 顺序内聚 > 通信内聚 > 过程内聚 > 时间内聚 > 逻辑内聚 > 偶然内聚
- 功能内聚:所有元素共同完成单一功能(最高)。
- 顺序内聚:输出作为下一部分输入。
- 通信内聚:操作同一数据结构。
- 过程内聚:必须按特定次序执行。
- 时间内聚:同一时间段执行(如初始化)。
- 逻辑内聚:逻辑相似、参数决定行为。
- 偶然内聚:毫无关系(最低)。
设计原则:高内聚、低耦合;模块扇入越大越好(复用度高),扇出适中(3—4,过大则复杂)。真题 2025 下 30/59、2024 下 52、2021 下 31—32。
3.4 信息隐蔽与抽象#
- 信息隐蔽:模块内应隐藏"可能变化的设计决策",只暴露稳定接口。
- 抽象:忽略细节、提取本质;与信息隐蔽互为表里。
- 真题:2020 下 33—34。
四、UML 与建模#
4.1 图的两大类(先分类再选图,答题不跑偏)#
| 类别 | 图 | 主要用途 |
|---|
| 结构图(静态) | 类图、对象图、包图、组合结构图、构件图、部署图、制品图 | 描述系统静态结构 |
| 行为图(动态) | 用例图、活动图、状态图、顺序图、通信图、定时图、交互概览图 | 描述系统动态行为 |
(UML 2.0 定义了 13 种图;不同版次教材对"制品图"是否单列有差异,考试以题干选项为准。)
4.2 高频图—用途对照#
| 图 | 一句话用途 | 真题 |
|---|
| 用例图 | 参与者与用例及关系(包含/扩展/泛化) | 2026 上 18、2025 上 4、2024 上 16 |
| 类图 | 类、属性、方法及关联/聚合/组合/依赖/泛化 | 常与"逻辑视图"绑定 |
| 顺序图(时序图) | 按时间顺序展示对象间消息交互 | 2022 下 33—34、2021 下案例二 |
| 通信图(协作图) | 强调对象间的链接关系,弱化时间顺序 | 与顺序图等价互换 |
| 活动图 | 业务流程/工作流、并发分叉汇合 | 2025 下 70、2025 上 25 |
| 状态图 | 单个对象的状态迁移 | 与"进程视图"关联 |
| 部署图 | 软件到硬件节点的物理部署 | 2025 下 69 |
| 构件图 | 构件及其依赖,对应开发视图 | — |
| 包图 | 组织模型元素,对应开发视图 | — |
| 界面建模 | 界面原型/交互(常借活动图或专用 UI 模型) | 2024 下 35 |
4.3 用例三种关系(必考)#
| 关系 | 语义 | 判别 |
|---|
| 包含(include) | 多个用例必须复用的公共步骤 | 一定执行,箭头指向被包含用例 |
| 扩展(extend) | 满足条件时可选插入的增量行为 | 有扩展点、条件成立才执行 |
| 泛化(generalization) | 子用例/子参与者是一种父用例/父参与者 | "is-a" |
母题:2026 上 18、2025 上 4、2024 上 16。区分口诀:"必须"→包含;"可选/条件"→扩展;"是一种"→泛化。
4.4 SysML#
- 在 UML 基础上扩展的系统工程建模语言,新增:需求图(Requirement Diagram)、参数图(Parametric Diagram)、分配图;用 Block(块) 替代 Class。
- 真题:2023 下 11—12、2023 下选做 4。
4.5 DDD(领域驱动设计)#
- 限界上下文(Bounded Context):一个显式的边界,边界内术语与模型保持一致;
- 上下文映射:防腐层(ACL)、共享内核、客户/供应商;
- 真题:2022 下 31、2025 下案例二。
五、跨年真题定位索引#
| 年份 | 题号/案例 | 考点 |
|---|
| 2026 上 | 7 / 18 / 42 / 58 | 模式分类、用例关系、装饰器、结构化分析行为模型 |
| 2025 下 | 30 / 37 / 50 / 51 / 59 / 69 / 70 | 扇出、MVP、创建型、判定表、内聚、部署图、活动图 |
| 2025 上 | 4 / 25 / 29 | 用例关系、活动图、继承分类 |
| 2024 下 | 21 / 35 / 49 / 52 | 模式分类、界面建模、参与者关系、内聚 |
| 2024 上 | 16—18、选做 3 | 用例关系、需求分析常用图、创建型、UML 交互图 |
| 2023 下 | 11—12、31、选做 4 | SysML 新增图、需求分析常用模型、SysML 需求图 |
| 2022 下 | 24 / 28 / 30 / 33—34 | 信息建模、工作流建模、UML 2 结构、顺序图 |
| 2021 下 | 30—33 | 结构化设计工具、耦合与内聚、UML |
| 2021 下 | 试题二 | 用例图 + 顺序图 + 三种模型(案例) |
| 2020 下 | 31—34 / 54—58 | 设计四活动、信息隐蔽、模式分类、创建型 |
| 2019 下 | 31—34 / 44—45 | 概要设计、结构化设计、模块化、UML 图与 4+1 |
| 2018 下 | 31—34 / 54—57 | 概要设计工具、设计四活动、模式分类与识别 |
| 2023 下 | 论文三 | 面向对象的建模及应用 |
六、典型陷阱#
- 抽象工厂 vs 工厂方法:题干出现"一系列/产品族"→抽象工厂;"一个产品、子类决定"→工厂方法。
- Bridge 的"两个维度":抽象维度 + 实现维度,缺一不可;只说"适配接口"是 Adapter。
- Command 的四个关键词:参数化、排队、日志、撤销。出现"撤销"优先 Command,其次 Memento(Memento 是"恢复状态"不是"撤销请求")。
- Decorator 与继承的区别:Decorator 是运行时动态加职责;题干强调"比继承更灵活"即 Decorator。
- 概要设计 vs 详细设计工具:模块结构图/层次图/HIPO→概要;流程图/PAD/伪代码/盒图→详细。
- 内聚排序题:功能内聚永远最高、偶然内聚永远最低;中间四类按"顺序>通信>过程>时间"记。
- 用例包含 vs 扩展:include 是"被复用",extend 是"可选增强";画箭头方向常被反着考。
- 顺序图 vs 通信图:顺序图强调时间顺序,通信图强调对象链接,二者语义等价。
- UML 图归属:部署图是结构图(很多人误当行为图);活动图是行为图。
- 构件图/包图/部署图对应视图:构件图、包图→开发视图;部署图→物理视图。
七、答题模板#
模板 A:案例"补全 UML 图"#
① 定边界:先读题干找"参与者"(人/外部系统),排除内部模块。
② 定用例:每个"参与者要做的事"是一个用例,动词开头("提交订单"而非"订单")。
③ 判关系:必须复用→include;条件触发→extend;是一种→泛化。
④ 顺序图:按"参与者→界面→控制→实体"的消息顺序补,每条消息要有序号与返回。
⑤ 自检:是否有孤立用例?是否有参与者无用例?消息是否与题干步骤一一对应?
模板 B:案例"识别应采用的模式"(30 秒)#
Step1 找变化点:什么会变?(算法/创建过程/接口/状态/访问方式)
Step2 对关键词表:算法互换→Strategy;创建族→Abstract Factory;
接口不兼容→Adapter;动态加职责→Decorator;状态驱动→State;
一对多通知→Observer;请求封装+撤销→Command。
Step3 补一句收益:该模式使 ______ 与 ______ 解耦,符合开闭原则。
模板 C:论文"论面向对象的建模"#
一、项目背景(300 字)
二、方法论述(400 字):用例建模→领域建模(类图)→动态建模(顺序图/状态图)→
构件与部署建模;说明 UML 在其中的作用(统一语言、可追溯)
三、实践(900 字):给出 1 张类图的分层(边界类/控制类/实体类)、1 个顺序图的
关键交互、状态图的状态迁移,说明如何用模型发现需求遗漏
四、效果(200 字):需求返工率下降、与开发/测试的沟通成本下降
八、自测清单#
- [ ] 默写 23 种模式的三大类归属
- [ ] 用关键词表在 2 分钟内答对 15 个模式识别题
- [ ] 区分 Strategy/State、Adapter/Bridge、Decorator/Proxy、Facade/Mediator
- [ ] 默写耦合 7 级、内聚 7 级顺序
- [ ] 说出软件设计四活动及各自产出
- [ ] 说出用例三种关系并各举一例
- [ ] 说出 6 种常用 UML 图及其对应视图
- [ ] 说出 SysML 相比 UML 的新增内容
- [ ] 用模板 A 在 10 分钟内补全一张用例图 + 一张顺序图
九、来源与可信度#
- 模式定义与分类以 GoF《设计模式》及《系统架构设计师教程》为准。
- 2018 下 31—34、54—57 为〔推〕,已用教材原文交叉验证(如"数据设计改善程序结构、降低过程复杂性"为教材原句)。
- 近两年(2025—2026)题面多为考生回忆版,个别选项表述可能与原卷有差异,以套卷标注为准。