定義
使多個對象都有機會處理請求, 從而避免了請求的發(fā)送者與接收者之間的耦合關(guān)系。
將這些對象連成一條鏈,并沿著這條鏈傳遞該請求孽糖,知道有對象處理它為止 。
什么是 ‘鏈’ 我們將多個節(jié)點首位相連所構(gòu)成的模型成為鏈 毅贮, 對于鏈式結(jié)構(gòu)办悟,每個節(jié)點都可以被拆開再連接。
將這樣一種結(jié)構(gòu)應(yīng)用于編程領(lǐng)域滩褥,將每一個節(jié)點都看做是一個對象病蛉,每一個對象擁有不同的處理邏輯,將一個請求從鏈式的首端發(fā)出瑰煎,沿著鏈的路徑依次傳遞給每一個節(jié)點對象铡恕,直至有對象處理這個請求為止 ,我們將這一種模式稱為責任鏈模式丢间。
使用場景
多個對象可以處理同一請求,但具體由哪個對象處理則在運行時動態(tài)決定
在請求處理者不明確的情況下向多個對象中的一個提交一個請求
需要動態(tài)指定一組對象處理請求
簡單示例
public abstract class Leader {
protected Leader nextHandler ; //上一級領(lǐng)導
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("經(jīng)理處理報銷 金額:"+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 ;
// 發(fā)起報銷
groupLeader.handleRequest(5000);
}
}
android 源碼示例 view 的時間傳遞 dispatchToouchEvent