菜单 学习猿地 - LMONKEY

VIP

开通学习猿地VIP

尊享10项VIP特权 持续新增

知识通关挑战

打卡带练!告别无效练习

接私单赚外块

VIP优先接,累计金额超百万

学习猿地私房课免费学

大厂实战课仅对VIP开放

你的一对一导师

每月可免费咨询大牛30次

领取更多软件工程师实用特权

入驻
229
0

责任链模式

原创
05/13 14:22
阅读数 26142

一、概述

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

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

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

责任链模式UML图如下:

 

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


 二、运用实践

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

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

事件分发 

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

事件拦截


 

三、总结

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

优点:

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

缺点:

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

 

发表评论

0/200
229 点赞
0 评论
收藏