概述
责任链模式(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