对应 设计模式面试题 14 道。
为什么学设计模式
设计模式是可复用的面向对象设计方案,不是语法,而是组织类与对象的经验。读懂 JDK / Spring 源码、维护老项目、写出低耦合代码都绕不开它。
三大分类
| 分类 | 关注点 | 笔记 |
|---|---|---|
| 创建型 | 如何创建对象 | 创建型模式 |
| 结构型 | 如何组合类与对象 | 结构型模式 |
| 行为型 | 对象如何协作 | 行为型模式 |
创建型 — 单例、工厂方法、抽象工厂、建造者、原型结构型 — 代理、外观、适配器、装饰器、桥接、组合、享元行为型 — 策略、模板方法、观察者、责任链、命令、状态…
六大原则(SOLID + 最少知道)
| 原则 | 一句话 |
|---|---|
| 开闭 | 扩展开放,修改关闭 |
| 里氏替换 | 子类能替换父类使用 |
| 依赖倒置 | 依赖接口,不依赖具体 |
| 接口隔离 | 接口小而专 |
| 迪米特 | 少依赖无关类,高内聚低耦合 |
| 单一职责 | 一个类只做一类事 |

模式对比速查
| 对比 | 区别 |
|---|---|
| 工厂 vs 建造者 | 创建 vs 分步组装 |
| 代理 vs 装饰器 | 控制访问/增强 vs 动态叠加职责 |
| 策略 vs 状态 | 算法可互换 vs 状态驱动行为切换 |
| 外观 vs 适配器 | 简化一组接口 vs 转换不兼容接口 |
Spring 中的模式地图
| 组件 | 模式 | 详见 |
|---|---|---|
| BeanFactory / ApplicationContext | 工厂 | 创建型 |
| singleton Bean | 单例 | 创建型 |
| prototype Bean | 原型 | 创建型 |
| AOP | 代理 | 结构型 |
| JdbcTemplate | 模板方法 | 行为型 |
| ApplicationEvent | 观察者 | 行为型 |
