- 對個對象可以處理同一個請求,但具體哪個對象處理則在運行時動態決定
- 在請求處理者不明確的情況下向多個對象中的一個提交一個請求
- 需要動態指定一組對象處理請求
設計模式之---責任鏈模式
責任鏈模式,大家肯定都有聽說過,web應用上的tomcat的filter可以理解爲一個責任鏈模式,責任鏈模式就相當於一個處理鏈,一個對象從第一個處理對象開始,處理完之後傳到第二個,直到最後一個,而且處理對象的順序和數量可以任意改動。
責任鏈模式的定義:
使多個對象都有機會處理請求,從而避免了請求的發送者和接受者之間的耦合關係,將這些對象連成一條鏈,並沿着這條鏈傳遞該請求,直到有對象處理它爲止。
使用場景:
UML圖:
新建一個工程,目錄結構
比如說構造一個抽象的領導者
public
abstract
class
Leader {
//上一級的領導處理者
public
Leader
nextHanlder
;
/**
* 處理請求
* */
public
final
void
handleRequest(int
money){
if(money
<=limit()){
handle(
money);
}
else{
if(null
!=nextHanlder
){
nextHanlder.handle(money
);
}
}
}
public
abstract
int
limit();
public
abstract
void
handle(int
money);
}
在這個抽象的領導類裏面只做了兩件事。一是定義了兩個抽象接口方法來確定一個領導者應有的行爲和屬性,二是聲明看一個處理請求的方法來確定當前領導是否有能力處理報賬請求,如果沒有這權限,則將該請求轉發給上級領導處理。
然後是領導的實現,這裏只貼一個
/**
* 老闆
* */
public
class
Leader1
extends
Leader{
@Override
public
int
limit() {
//
TODO
Auto-generated method stub
return
10000;
}
@Override
public
void
handle(int
money) {
//
TODO
Auto-generated method stub
System.
out.println("老闆批覆報銷"
+money
+"元"
);
}
}
客戶端
public
class
client {
public
static
void
main(String[]
args) {
//構造領導者對象
Leader1
liLeader1=new
Leader1();
Leader2
liLeader2=new
Leader2();
Leader3
liLeader3=new
Leader3();
liLeader2.nextHanlder
=liLeader3
;
liLeader3.nextHanlder
=liLeader1
;
liLeader2.handleRequest(500);
}
}
運行結果這裏就不貼了,這知識一個簡單的責任鏈模式的實現。但是在日常應用裏很少有純的責任鏈模式,一般都有一些變動,比如像鏈表一樣,從單向條鏈表--》雙向鏈表-》樹-》圖類似的發展結構。這個只是一個指導思想而已,在安卓中責任鏈模式的實現比較典型的就是對觸摸事件的分發處理。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.