责任链模式把多个处理节点串成一条链,请求沿着链依次传递。每个节点只关心自己能否处理,以及是否继续交给下一个节点。

适用场景

责任链适合处理步骤可拆分、顺序可调整、节点可增减的流程。例如校验、过滤、审批、拦截器等。

如果所有逻辑都写在一个大方法里,后续新增条件会让分支越来越复杂。拆成责任链后,每个节点可以独立维护。

基本结构

一个简单节点通常包含两个动作:处理当前请求,以及调用下一个节点。

1
2
3
interface Handler {
void handle(Context context, Chain chain);
}

Chain 负责维护节点顺序。节点本身不需要知道完整链路,只要决定是否继续。

优点

  • 单个节点职责清晰;
  • 新增处理逻辑较容易;
  • 可以通过配置调整顺序;
  • 便于复用公共流程。

风险

责任链过长时,排查问题可能变困难。尤其是某个节点提前终止链路,后续节点没有执行,日志和上下文就很重要。

此外,并不是所有 if else 都需要改成责任链。流程稳定且分支很少时,普通代码更直接。

小结

责任链模式适合把一组可组合的处理步骤拆开。它提升扩展性,但也需要清晰的执行顺序和可观察性。