Skip to content

[L1] 设计模式的三大分类与意图

一句话结论

GoF 将 23 种模式按意图分为创建型、结构型、行为型,分别解决对象创建、组合与职责协作问题。

体系讲解

三大分类对照表

分类核心意图模式数典型代表
创建型(Creational)将对象的创建与使用解耦,隐藏实例化细节5单例、工厂方法、抽象工厂、建造者、原型
结构型(Structural)通过组合/封装灵活地拼装类与对象7适配器、装饰器、代理、门面、桥接、组合、享元
行为型(Behavioral)定义对象间的职责分配与协作算法11策略、观察者、模板方法、责任链、命令、状态…

OOP 三大特性与模式的对应关系

  • 封装 → 创建型:工厂方法、建造者隐藏构造细节,调用方无需感知具体类
  • 继承 / 多态 → 行为型:策略、模板方法通过多态在运行时替换算法
  • 组合 → 结构型:装饰器、代理以"包裹"方式组合对象,优于硬继承

模式解决复杂度的三条主线

  1. 解耦:观察者让发布者不依赖订阅者具体类;门面降低子系统与调用层耦合
  2. 扩展:装饰器、策略在不改动核心逻辑的前提下增加新行为
  3. 复用:模板方法抽取公共骨架;享元共享细粒度对象

快速选型依据

需要控制实例化 → 创建型
需要灵活组装类/对象关系 → 结构型
需要定义协作方式/算法替换 → 行为型

考察意图

考查候选人对设计模式的全局视角:能否用三大分类快速定位一个模式所属域;区分"只能背名称"与"真正理解设计意图"的候选人。

追问链

  1. 三大分类各举一个你在项目中实际用过的模式,说明为什么选它?
    简答:如创建型用工厂方法隔离 DB 驱动创建、结构型用装饰器叠加日志/缓存、行为型用策略替换支付渠道——重点说清"用它解决了什么问题"。

  2. "优先组合而非继承"对应哪类模式?为什么?
    简答:对应结构型。继承是编译期静态耦合,子类依赖父类实现;组合可在运行时替换被包裹对象,装饰器和代理都是典型例子。

  3. 行为型模式最多(11 种),它们的共同点是什么?
    简答:都在描述"多个对象如何分配职责/协作",本质是对控制流或算法的封装与解耦,区别在于协作拓扑(1:1 命令、1:N 观察者、链式责任链等)。

  4. "代理"属于哪类?很多人会答错,为什么?
    简答:代理是结构型,因其意图是控制访问方式(组装关系),而非定义行为协作逻辑;行为型的核心是"算法/职责分配",与此不同。

易错点

  1. 将代理模式归入行为型:代理的意图是"控制对一个对象的访问",属结构型;行为型关注的是职责协作而非访问控制。
  2. 混淆工厂方法与抽象工厂:工厂方法由子类决定创建单一产品,抽象工厂创建相关联的一族产品(多个产品维度)。
  3. 认为模式越多越好:模式本身是解决特定上下文问题的方案,过度设计反而增加复杂度;GoF 原书强调"何时使用"和"何时不用"。

代码示例

本题无需代码。

基于 Apache License 2.0 开源