行为型模式

笔记/Java/设计模式/行为型模式

总览见 设计模式概述 · 面试速查见 设计模式面试题 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 组合切换算法
文章目录

文章目录