3.1 责任链模式
责任链模式(Chain of Responsibility)让你把一个请求沿着一串处理者依次传递,每个处理者要么处理它,要么交给链上的下一个。发送者并不知道最终是谁处理的——它只是把请求丢进链头。
报销审批是绝佳例子:小额组长就能批,金额越大越要往上交,直到有人“够权限”为止。下面的实验拖动金额,看请求如何沿着审批链向上流动,直到某一级批准。
正在加载交互实验...
处理者只认识“下一个”
java
abstract class Handler {
protected Handler next;
public Handler setNext(Handler n) { this.next = n; return n; }
public void handle(Request req) {
if (canHandle(req)) process(req);
else if (next != null) next.handle(req); // 交给下一环
}
protected abstract boolean canHandle(Request req);
protected abstract void process(Request req);
}每个处理者只持有一个 next 引用。链的结构(谁在谁前面、有几环)可以灵活组装,甚至运行时调整。
正在加载概念检查...
任意一环都能“短路”整条链
Web 框架的中间件就是责任链的现实化身:鉴权、限流、日志一层层处理请求,任意一层都可以拦截并终止后续处理(比如鉴权失败直接返回 401)。下面的实验让你给中间件排序、开关令牌,观察请求在哪一环被拦下。
正在加载交互实验...
正在加载概念检查...
取舍
- 好处:发送者与接收者解耦;处理者可独立增删、重排;每个处理者职责单一。
- 风险:请求可能走完整条链都没人处理(要有兜底);链太长会让调试时“到底谁处理的”变得难追踪。
正在加载本节练习...