职责链模式
职责链( Chain of Responsibility )模式也被叫做责任链模式,在《设计模式》属于行为型模式,是一个请求有多个对象来处理,这些对象是一条链,但具体由哪个对象来处理,根据条件判断来确定,如果不能处理会传递给该链中的下一个对象,直到有对象处理它为止。责任链模式将请求和处理分离开来,进行解耦。
责任链模式涉及角色
1、抽象处理者( Handler )角色:定义一个处理请求的抽象类。如果需要,可以定义一个方法以设定和返回对下家的引用。
2、具体处理者( ConcreteHandler ) 角色:具体处理者接到请求后,可以选择将请求处理掉,或者将请求传给下家。由于具体处理者持有对下家的引用,因此,如果需要,具体处理者可以访问下家。
应用场景
很常见的一个场景:请假。假定请假3天以内,由项目经理直接审批;3-5天,由部门经理审批通过;大于5天,则由总经理通过。
如果把上面的场景应用到责任链模式中去,项目经理、部门经理、总经理就是一个个具体的责任人,他们可以对请求做出处理,但是他们也只能在自己的权限范围内处理该请求。
抽象处理者
|
|
具体处理者
项目经理
部门经理
总经理
代码调用
|
|
打印
Android 应用
1、Ordered Broadcast (有序广播)
Ordered Broadcast 的接收者将按预先声明的优先级依次接收 Broadcast 。如:A 的级别高于 B , B 的级别高于 C 。那么,Broadcast 先传给 A ,再传给 B ,最后传给 C 。优先级声明在
2、ViewGroup 事件传递
事件传递也类似于一条责任链,分别有 dispatchTouchEvent (分发)、 onInterceptTouchEvent (拦截)、 onTouchEvent (处理),寻找责任者,一旦责任者消费掉该次事件,就并不再传递,体现在 View 的 onTouchEvent 方法中返回值。
参考
JAVA设计模式之 职责链模式【Chain of Responsibility Pattern】