一、概念
避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止。
1.1、定义
将请求的「处理对象」链接成链,请求将沿着对象链传递,直到有对象响应为止。链上每个对象都有机会处理请求,同时将请求的发送者和接收者进行解耦。

- Handler,处理者类:定义请求的通用处理接口,核心在于有个指向下一个Handler的next指针。
- ConcreteHandler,具体处理类
1.2、解决的问题
-
问题分析:当针对某个请求,有很多的对象都可以处理的时候。
-
模式解决思路:定义处理抽象基类,将多个处理者Handler链接成链表,利用链表数据结构,一个个的处理。
二、模式的应用和优缺点
2.1、应用场景
- 实例:ervlet、dubbo、mybatis中的过滤器filter。
2.2、优缺点
-
优点:
发送者和接收者分离,有效降低耦合度;同时扩展处理类容易,可以复用性强。 -
缺点:
链条太长的时候影响处理效率,且不能保证请求一定被接收。
链表特性,导致代码调试时不太方便,不容易观察运行时的特征,且排查错误也不太容易。
网友评论