Appearance
设计模式总览:先记分类,再理解变化点
很多人学设计模式时,最容易卡在两件事上:
- 一上来就想把 23 种模式全背下来
- 只记定义,不知道它在代码里到底解决什么问题
更实用的入门方式,其实不是死记硬背,而是先把模式按“解决哪类问题”分组,再去理解每一类背后的变化点。
先说结论
设计模式可以先按三大类来记:
- 创建型:解决“对象怎么创建更合理”
- 结构型:解决“类和对象怎么组织更清晰”
- 行为型:解决“对象之间怎么协作更灵活”
如果只想先建立整体框架,记住这三层就已经很够用了。
一、23 种设计模式怎么分
1. 创建型
创建型模式更关心对象的创建过程,不希望业务代码到处直接 new。
常见模式:
- 工厂方法
- 抽象工厂
- 单例
- 建造者
- 原型
这类模式的核心问题是:
- 谁来创建对象
- 创建逻辑放在哪里
- 创建过程是否需要统一约束
2. 结构型
结构型模式更关心“怎么把类和对象组织起来”。
常见模式:
- 适配器
- 装饰器
- 代理
- 外观
- 桥接
- 组合
- 享元
这类模式通常用于:
- 给旧接口做兼容
- 在不改原类的情况下增强能力
- 隔离复杂子系统
3. 行为型
行为型模式更关心对象之间怎么协作。
常见模式:
- 策略
- 模板方法
- 观察者
- 责任链
- 命令
- 状态
- 访问者
- 中介者
- 解释器
- 迭代器
- 备忘录
这类模式最值得关注的是:
- 行为如何切换
- 请求如何传递
- 变化逻辑如何从主流程里拆出来
二、学设计模式时最该先理解什么
比起背定义,更值得先掌握的是下面这几个问题:
- 哪部分代码经常变化
- 哪部分代码应该稳定
- 变化逻辑是否应该从主流程里拆出去
- 对象创建是否正在污染业务代码
很多模式的本质,都是围绕“隔离变化”展开的。
三、常说的设计原则,应该怎么理解
设计模式背后常见的一组原则,通常会先提这 6 个:
- 单一职责原则
- 开闭原则
- 里氏替换原则
- 依赖倒置原则
- 接口隔离原则
- 迪米特法则
另外还有一个在工程实践里也经常提到:
- 合成复用原则
很多旧笔记会把“六大原则”和“合成复用原则”混在一起写,这次可以把它们分开理解:
- 前 6 个更常被当成主线原则
- 合成复用原则更像补充,强调优先组合而不是继承
四、设计模式到底该怎么学
更稳妥的顺序通常是:
- 先学简单但高频的模式
- 再去看复杂抽象
- 最后放到框架源码和项目里识别
第一阶段:先学高频模式
建议优先:
- 单例
- 工厂
- 策略
- 模板方法
- 观察者
- 装饰器
- 适配器
因为这几种模式在 Java、Spring、业务系统里都很常见。
第二阶段:带着问题看框架
例如:
- Spring 里的
BeanFactory和FactoryBean - JDK 动态代理和装饰器思想
- 过滤器链、拦截器链背后的责任链思想
这时候你会发现,设计模式不是单独存在的知识点,而是很多框架设计的“语法”。
五、几个常见误区
1. 不是所有代码都要套模式
模式是为了降低复杂度,不是为了增加表演痕迹。
如果业务本来就很简单,直接写清楚往往比硬套模式更好。
2. 模式不是越多越高级
真正好的设计通常是:
- 只在有变化压力的地方做抽象
- 没有变化压力的地方尽量保持直接
3. 先看场景,再看定义
只背模式定义,遇到代码时依然不知道何时使用。
真正有用的是先问自己:
- 这里到底在解决创建问题、结构问题,还是行为问题
六、怎么把模式学成自己的能力
最有效的方法不是“背口诀”,而是训练下面这个习惯:
- 看到重复创建逻辑,想到工厂
- 看到可切换算法,想到策略
- 看到多层增强,想到装饰器
- 看到一整条拦截链,想到责任链
- 看到全局唯一资源,想到单例
模式真正有价值的地方,不是考试,而是让你在复杂代码面前更快看出结构。
一句话总结
设计模式不用一口气全背下来。
先记住“创建型、结构型、行为型”这三层,再围绕变化点去理解具体模式,学习曲线会平滑很多,也更容易落到真实项目里。