总览见 设计模式概述 · 面试速查见 设计模式面试题 14 道。
行为型模式关注对象之间的通信与职责分配:算法切换、流程骨架、事件通知、请求传递等。
GoF 共 11 种:策略、模板方法、观察者、责任链、命令、状态、迭代器、备忘录、访问者、中介者、解释器。
模板方法模式
父类定义算法骨架(final process()),可变步骤由子类实现(钩子方法)。
public abstract class Template { public final void process() { step1Fixed(); step2Hook(); // 子类实现 step3Fixed(); } protected abstract void step2Hook();}Servlet、JdbcTemplate、JUnit 都用了模板方法。
策略模式
把算法封装成独立策略类,由 Context 持有当前策略,消除大段 if-else。
interface PayStrategy { void pay(); }class Context { private PayStrategy strategy; void execute() { strategy.pay(); }}场景:会员等级折扣、支付渠道(微信/支付宝/银联)。
优点:算法自由切换、易扩展。缺点:策略类增多。
观察者模式
Subject 维护 Observer 列表;状态变更时 notifyAll(),各 Observer update()。
- 推模式:主题把数据推给观察者
- 拉模式:观察者收到通知后自行拉取

Spring ApplicationEvent / ApplicationListener 是观察者变体。
其他行为型模式(速览)
| 模式 | 一句话 |
|---|---|
| 责任链 | 请求沿处理链传递,直到被处理 |
| 命令 | 将请求封装为对象,支持撤销/队列 |
| 状态 | 状态变化驱动行为切换 |
| 迭代器 | 统一遍历集合,隐藏内部结构 |
行为型对比
| 对比 | 区别 |
|---|---|
| 策略 vs 状态 | 算法可互换 vs 状态驱动行为切换 |
| 模板方法 vs 策略 | 继承固定骨架 vs 组合切换算法 |