责任链模式#
一种行为设计模式,允许我们将请求沿着处理者链进行发送,收到请求后每个处理者都可以对请求进行处理,或者选择将其传递给链上的下个处理者。
应用举例#
在到目前为止的学习中,在很多地方都可以见到责任链模式的影子。
- 后端开发框架中过滤器的应用,包括但不限于SpringBoot中的过滤器特性,Java Servlet Filter,可以一步一步、验证、传递请求。
- 在微服务开发场景下,微服务网关对请求的各项处理。
- 在JVM中,双亲委派机制
- 各种中间件Redis、Kafka等
具体思想#
和所有其他的行为设计模式一样,责任链会将要做出的特定行为转换成被称作为处理者
在类似于复杂系统中逐步对客户端请求进行鉴权的场景下,每一个检查步骤都可以被抽取为仅仅提供单个方法的类,执行检查操作。原始请求以及数据都会被作为参数传递给该方法。
责任链模式,会将这些处理者连成一条链,链上的每个处理者都会有一个成员变量来存储请对象的引用。除了处理请求,处理者还会负责沿着链传递请求,请求在链上移动。
处理者可以判断是否不再沿着链继续向下请求,以此来取消后续的所有步骤。 同时处理者也可以判断是否需要对该请求进行处理…
整体结构#
对比总结#
责任链模式、 命令模式、中介者模式、观察者模式用于处理客户端和请求接收端直接不同的连接方式:
- 责任链模式将请求的发送者与接收者解耦,请求沿着由多个处理者组成的链条依次传递,直到其中一个处理者处理该请求或链条结束。
- 命令模式在端与端之间建立单向连接
- 中介者清除了二者之间的直接连接,强制他们通过一个中介对象进行间接沟通。
- 观察者允许接收者动态地订阅或者取消接收请求
装饰模式和责任链模式都是依靠递归组合将需要执行的操作传递给一系列的对象:
- 责任链的管理者可以相互独立的执行,并且可以随时中断请求
- 装饰是在遵循基本接口的情况下扩展对象的行为,并且不能中断请求的传递