定义
使多个对象都有机会处理请求, 从而避免了请求的发送者与接收者之间的耦合关系。
将这些对象连成一条链,并沿着这条链传递该请求,知道有对象处理它为止 。
什么是 ‘链’ 我们将多个节点首位相连所构成的模型成为链 , 对于链式结构,每个节点都可以被拆开再连接。
将这样一种结构应用于编程领域,将每一个节点都看做是一个对象,每一个对象拥有不同的处理逻辑,将一个请求从链式的首端发出,沿着链的路径依次传递给每一个节点对象,直至有对象处理这个请求为止 ,我们将这一种模式称为责任链模式。
使用场景
多个对象可以处理同一请求,但具体由哪个对象处理则在运行时动态决定
在请求处理者不明确的情况下向多个对象中的一个提交一个请求
需要动态指定一组对象处理请求
简单示例
public abstract class Leader {
protected Leader nextHandler ; //上一级领导
public final void handleRequest(int money){
if(money <= limit()){
handle(money);
}else{
if(null != nextHandler){
nextHandler.handleRequest(money);
}
}
}
// 能批复的金额
abstract int limit();
// 处理报销
abstract void handle(int money) ;
}
public class GroupLeader extends Leader {
@Override
int limit() {
return 1000;
}
@Override
void handle(int money) {
System.out.println("组长处理报销 金额:"+money);
}
}
public class ManagerLeader extends Leader {
@Override
int limit() {
return 5000;
}
@Override
void handle(int money) {
System.out.println("经理处理报销 金额:"+money);
}
}
public class BossLeader extends Leader {
@Override
int limit() {
return Integer.MAX_VALUE;
}
@Override
void handle(int money) {
System.out.println("老板处理报销 金额:"+money);
}
}
public class Client {
public static void main(String[] args){
GroupLeader groupLeader = new GroupLeader() ;
ManagerLeader managerLeader = new ManagerLeader() ;
BossLeader bossLeader = new BossLeader() ;
groupLeader.nextHandler = managerLeader;
managerLeader.nextHandler = bossLeader ;
// 发起报销
groupLeader.handleRequest(5000);
}
}
android 源码示例 view 的时间传递 dispatchToouchEvent