Skip to content

Files

Latest commit

db423ff · Aug 6, 2019

History

History
33 lines (21 loc) · 1.79 KB

responsibility.md

File metadata and controls

33 lines (21 loc) · 1.79 KB

设计模式 -- 责任链模式

定义

使多个对象都有机会处理请求,从而避免了请求的发送者和接受者之间的耦合关系。讲这些对象连成一条链,并沿着这条链传递该请求,直到有对象处理它为止。

使用场景

  • 多个对象可以处理同一个请求,但具体是哪个对象处理则在运行时动态决定
  • 在请求处理者不明确的情况下向多个对象中的一个提交一个请求
  • 需要动态指定一组对象处理请求

UML 类图

由上图,责任链模式 主要包含两种角色:

  • Handler:抽象处理者角色,声明一个请求处理的方法,并在其中保持一个对下一个处理节点Handler对象的引用。
  • ConcreteHandler:具体处理者角色,对请求进行处理,如果不能处理则将该请求转发给下一个节点上的处理对象。

优缺点

  • 优点:
    • 可以对请求者和处理者的关系解耦,提高代码的灵活性。
  • 缺点:
    • 每次都需要对链中请求处理者遍历,如果处理者太多那么遍历必定会影响性能,特别是在一些递归调用者中,要慎用

Android 源码中的责任链模式的实现

View事件的分发处理

ViewGroup事件投递的递归调用就类似于一条责任链,一旦其寻找到责任者,那么将由责任者持有并消费掉该次事件,具体体现在View的onTouchEvent方法中返回值的设置,如果返回false,那么意味意味着当前View不会是该次事件的责任人将不会对其持有;如果返回true,此时View会持有该事件并不再向外传递。

详情可查看:Android事件分发机制