首页 > 技术文章 > 责任链模式

not2 2019-06-18 11:15 原文

一、概述

一般问题:多个对象可以处理同一请求,具体由哪个对象处理则在运行时动态决定

核心方案:将这些对象连成一条链,并沿着这条链传递请求,直到有对象处理它为止

设计意图:一般情况下请求一个对象可以直接调用其方法,这样请求发出者与处理者耦合;如果同一请求可以被多个对象处理,根据具体条件不同调用不同对象方法,这样请求发出者与多个处理者都耦合在一起;为了简化请求发出者的逻辑,同时解耦请求发出者和处理者,责任链模式将所有请求处理者连接成一条链,同时沿着这条链传递请求,直到请求被执行为止。

责任链模式UML图如下:

 

Handler本身维护下一个处理者实例。


 二、运用实践

Android的事件分发机制就用到了责任链模式。Android的View和ViewGroup层层组合呈树型结构,每层都可以处理Touch事件,最终由谁来处理,需要事件拦截机制决定。

View树就是一条处理链,事件层层向下传递,正常情况下一个完整传递如下图:

事件分发 

假如事件在LinearLayout层被处理,则不会再往下分发:

事件拦截


 

三、总结

总结:责任链模式是一种行为型设计模式,目的是将请求的发起与执行解耦。

优点:

  • 降低耦合度,请求的发送与接收解耦
  • 处理类可以灵活增减

缺点:

  • 不能保证请求一定被接收
  • 系统性能将受到一定影响

 

推荐阅读