1.1 基本概念
职责链模式(Chain of Responsibility Pattern):避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将这类对象链接成一条链,并沿着这条链传递请求,直到有对象处理它为止。
1.2 模式结构
(1)Hander(抽象处理者)
定义了一个处理请求的接口;
(2)ConcreteHander(具体处理者)
处理它所负责的请求,如果可处理该请求,就处理掉这个请求;否则将该请求转发给它的下一个可以处理该请求的对象,所以它必须能访问它的下一个可以处理同样请求的对象;
(3)Client(客户类):
向处理对象提出具体的请求。
1.3 优缺点
优点:
- 处理者对于请求者完全透明,请求者无需事先知道谁来处理;
- 它允许多与一个的处理者对象根据自己的逻辑来决定哪一个处理者最终处理这个命令,提高系统的扩展性;
- 扩展灵活,新增具体请求者时无需修改原有系统的代码;
- 责任链模式减低了发出命令的对象和处理命令的对象之间的耦合;
缺点:
- 产生许多细颗粒对象;
- 不一定能被处理,可能到末端也没被处理或者中间写错;
- 比较长的责任链,可能涉及多个处理对象,性能问题,还有调试不方便;
- 建链不当,可能造成循环调用,导致系统进入死循环;
1.4 应用场景
- 多个对象可以处理同一请求,但具体由哪个对象处理,则需要动态决定时。
- 在请求者不明确的情况下需要向多个对象中的一个提交请求时。
- 需要动态的