Skip to content
设计模式与结构抽象 · 第 1 篇 / 共 3 篇
领域编程与框架
专题架构与设计专题
当前序列设计模式与结构抽象
阅读位置第 1 篇 / 共 3 篇当前专题第 1 个序列 / 共 3 个序列

设计模式总览:先记分类,再理解变化点

很多人学设计模式时,最容易卡在两件事上:

  • 一上来就想把 23 种模式全背下来
  • 只记定义,不知道它在代码里到底解决什么问题

更实用的入门方式,其实不是死记硬背,而是先把模式按“解决哪类问题”分组,再去理解每一类背后的变化点。

先说结论

设计模式可以先按三大类来记:

  • 创建型:解决“对象怎么创建更合理”
  • 结构型:解决“类和对象怎么组织更清晰”
  • 行为型:解决“对象之间怎么协作更灵活”

如果只想先建立整体框架,记住这三层就已经很够用了。

一、23 种设计模式怎么分

1. 创建型

创建型模式更关心对象的创建过程,不希望业务代码到处直接 new

常见模式:

  • 工厂方法
  • 抽象工厂
  • 单例
  • 建造者
  • 原型

这类模式的核心问题是:

  • 谁来创建对象
  • 创建逻辑放在哪里
  • 创建过程是否需要统一约束

2. 结构型

结构型模式更关心“怎么把类和对象组织起来”。

常见模式:

  • 适配器
  • 装饰器
  • 代理
  • 外观
  • 桥接
  • 组合
  • 享元

这类模式通常用于:

  • 给旧接口做兼容
  • 在不改原类的情况下增强能力
  • 隔离复杂子系统

3. 行为型

行为型模式更关心对象之间怎么协作。

常见模式:

  • 策略
  • 模板方法
  • 观察者
  • 责任链
  • 命令
  • 状态
  • 访问者
  • 中介者
  • 解释器
  • 迭代器
  • 备忘录

这类模式最值得关注的是:

  • 行为如何切换
  • 请求如何传递
  • 变化逻辑如何从主流程里拆出来

二、学设计模式时最该先理解什么

比起背定义,更值得先掌握的是下面这几个问题:

  • 哪部分代码经常变化
  • 哪部分代码应该稳定
  • 变化逻辑是否应该从主流程里拆出去
  • 对象创建是否正在污染业务代码

很多模式的本质,都是围绕“隔离变化”展开的。

三、常说的设计原则,应该怎么理解

设计模式背后常见的一组原则,通常会先提这 6 个:

  • 单一职责原则
  • 开闭原则
  • 里氏替换原则
  • 依赖倒置原则
  • 接口隔离原则
  • 迪米特法则

另外还有一个在工程实践里也经常提到:

  • 合成复用原则

很多旧笔记会把“六大原则”和“合成复用原则”混在一起写,这次可以把它们分开理解:

  • 前 6 个更常被当成主线原则
  • 合成复用原则更像补充,强调优先组合而不是继承

四、设计模式到底该怎么学

更稳妥的顺序通常是:

  1. 先学简单但高频的模式
  2. 再去看复杂抽象
  3. 最后放到框架源码和项目里识别

第一阶段:先学高频模式

建议优先:

  • 单例
  • 工厂
  • 策略
  • 模板方法
  • 观察者
  • 装饰器
  • 适配器

因为这几种模式在 Java、Spring、业务系统里都很常见。

第二阶段:带着问题看框架

例如:

  • Spring 里的 BeanFactoryFactoryBean
  • JDK 动态代理和装饰器思想
  • 过滤器链、拦截器链背后的责任链思想

这时候你会发现,设计模式不是单独存在的知识点,而是很多框架设计的“语法”。

五、几个常见误区

1. 不是所有代码都要套模式

模式是为了降低复杂度,不是为了增加表演痕迹。

如果业务本来就很简单,直接写清楚往往比硬套模式更好。

2. 模式不是越多越高级

真正好的设计通常是:

  • 只在有变化压力的地方做抽象
  • 没有变化压力的地方尽量保持直接

3. 先看场景,再看定义

只背模式定义,遇到代码时依然不知道何时使用。

真正有用的是先问自己:

  • 这里到底在解决创建问题、结构问题,还是行为问题

六、怎么把模式学成自己的能力

最有效的方法不是“背口诀”,而是训练下面这个习惯:

  • 看到重复创建逻辑,想到工厂
  • 看到可切换算法,想到策略
  • 看到多层增强,想到装饰器
  • 看到一整条拦截链,想到责任链
  • 看到全局唯一资源,想到单例

模式真正有价值的地方,不是考试,而是让你在复杂代码面前更快看出结构。

一句话总结

设计模式不用一口气全背下来。

先记住“创建型、结构型、行为型”这三层,再围绕变化点去理解具体模式,学习曲线会平滑很多,也更容易落到真实项目里。

延伸阅读相关文章优先当前专题,再补跨专题关联。
同一序列 · 顺着当前主线继续读工厂模式怎么选适合把设计模式、对象创建和结构抽象能力放在一组里系统理解。架构与设计专题 · 设计模式与结构抽象同一序列 · 顺着当前主线继续读单例模式怎么写更稳适合把设计模式、对象创建和结构抽象能力放在一组里系统理解。架构与设计专题 · 设计模式与结构抽象同专题其他序列 · 分布式系统设计基线接口幂等到底应该怎么设计适合把幂等、限流、分布式 ID 和一致性模型放在同一条架构主线上看。架构与设计专题 · 分布式系统设计基线同专题其他序列 · 分布式系统取舍与边界聚合根和事务边界怎么划分适合把 DDD、Saga、TCC 和 BFF、网关边界放在一起看。架构与设计专题 · 分布式系统取舍与边界跨专题关联 · 同场景:基础学习sync.Once 和单例初始化的常见坑适合把 goroutine 生命周期、context 边界、接口抽象和优雅停机放回 Go 服务实践里思考。Go 专题 · Go 并发模型与服务工程化跨专题关联 · 同场景:基础学习ClickHouse 入门适合把 ClickHouse 入门、表设计、慢查询和看板性能问题放在一起连续看。ClickHouse 专题 · ClickHouse 表设计与查询优化
继续阅读设计模式与结构抽象当前序列第 1 篇 / 共 3 篇当前专题第 1 个序列 / 共 3 个序列
往前看
上一序列Spring Boot 与事务实践从第 1 篇开始:Spring Boot 开发笔记
往后看
下一篇工厂模式怎么选继续当前序列下一章下一序列分布式系统设计基线从第 1 篇开始:接口幂等到底应该怎么设计

把零散经验整理成可查、可复用、可持续更新的企业级知识门户