概述

责任链模式(Chain of Responsibility Pattern)是一种行为型设计模式,它允许将多个处理者(Handler)按照顺序组成链式结构,让请求在这条链上依次传递,直到被某个处理者处理或链尾结束。

核心思想:将请求的发送者与处理者解耦,通过链式传递的方式,让多个对象有机会处理同一个请求。

责任链模式非常常见,尤其是在框架或中间件层。比如第一次接触责任链模式,一般都是 Spring 的 Interceptor。

责任链模式的形态

责任链(Chain of Responsibility)最初是 GoF 设计模式 提出的,核心思想是:_“多个对象都有机会处理一个请求,避免请求的发送者与接收者之间的耦合。” _但是在工程实践中,它衍生出多种“形态”,主要区别在于:

  • 是否传递结果
  • 是否异步
  • 是否允许中途修改数据流
  • 是否允许双向流动(进出)
类型特点示例
同步责任链(Classic Chain)+ 同步执行;
+ 每个 Handler 只决定“处理 / 是否继续传递”;
+ 不修改请求数据;
+ 常见于日志、事件分发。
Android 事件分发(dispatchTouchEvent)
Pipeline 式责任链(处理流式数据)+ 每个节点接收输入并返回输出;
+ 输出会传给下一个节点;
+ 支持对数据进行加工;
+ 常用于网络层、编译器管线。
OkHttp 拦截器链(Interceptor)、Spring Web Filter 链
双向责任链(Inbound/Outbound Pipeline)+ 请求先“顺序向下传递”,响应再“逆序返回”;
+ 常用于网络框架(如 Netty)。
Netty ChannelPipeline、浏览器请求 → 响应过滤链
异步责任链(Async Chain / Reactive Chain)+ 每个节点可能是异步的;
+ 节点之间通过回调或 Future 串联;
+ 可以等待上一个节点完成后继续。
网络请求分发、异步校验、动画序列、分布式工作流

更新: 2025-11-02 18:18:19
原文: https://www.yuque.com/dongpozhouzi-mshe3/zhm85g/kmnduooc5a67sd4p


相关笔记