Skip to content
难度基础(★)
建议时长45分钟

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 数量
意图匹配给多个意图描述,问哪个属于某模式用“一句话意图”排除相近项

课程中特别提醒:类图结构有时并不能唯一确定模式,因此考试中常根据类名、方法名、题干场景综合判断。如果类名与模式名无关,就回到业务场景和变化点。

设计模式识别路径

做题可以按这个顺序:

  1. 判断它解决的是创建、结构还是行为问题。
  2. 从题干找关键词:唯一实例、一系列产品、接口转换、动态添加职责、一对多通知、状态改变行为等。
  3. 如果有类图,先找特殊类名或方法名:BuilderDirectorStateCommandVisitoraccept()visit()
  4. 如果类图没有提示,回到场景:两个独立变化维度常是桥接;数据和操作分离常是访问者。
  5. 最后用分类排除选项。

三类模式的快速判断

问题更可能的分类例子
“对象由谁创建?创建过程能否推迟/复用/克隆/控制唯一?”创建型工厂方法、抽象工厂、建造者、原型、单例
“已有对象如何组合?接口如何兼容?访问如何控制?”结构型适配器、桥接、组合、装饰、外观、享元、代理
“对象之间如何协作?请求如何流转?算法/状态/操作如何变化?”行为型观察者、状态、策略、命令、职责链、访问者

例题

单选
单例模式属于:
单选
观察者、状态、策略、命令这些模式主要关注对象职责分配和交互,属于:

自查要点

  1. 创建型、结构型、行为型分别解决什么层次的问题?
  2. 为什么仅靠类图结构有时不能判断设计模式?
  3. 设计模式题为什么要同时看英文名、场景和意图?
  4. 5、7、11 分别对应哪三类模式?