責任鏈模式——《Android源碼設計模式解析與實踐》讀書筆記9

定義

使多個對象都有機會處理請求,從而避免了請求的發(fā)送者和接收者之間的耦合關(guān)系。將這些對象連成一條鏈,并沿著這條鏈傳遞該請求,直到有對象處理它為止。責任鏈模式屬于行為型設計模式之一。


使用場景

(1)多個對象可以處理同一請求,但具體由哪個對象處理則在運行時動態(tài)決定。

(2)在請求處理者不明確的情況下向多個對象中的一個提交一個請求。

(3)需要動態(tài)指定一組對象處理請求。


UML類圖

簡化模式:

簡化責任鏈模式,多角色

通用模式:

通用責任鏈模式,多角色

關(guān)鍵點

(1)請求的發(fā)起可以從責任鏈的任何一個節(jié)點開始。

(2)責任鏈中的任意一個處理者對象都只有兩個行為,一是處理請求,二是將請求轉(zhuǎn)送給下一個節(jié)點。

(3)處理者處理請求后不允許轉(zhuǎn)送到其他節(jié)點進行處理。

(4)純的責任鏈指請求被責任鏈中某個處理對象處理的責任鏈,不純的責任鏈指所有處理者對象都沒處理請求的責任鏈。


實現(xiàn)方式

簡化模式

Handler基類:

public abstract class Handler{

? ? protected Handler successor;

? ? public abstract void handleRequest(string condition);

}

Handler子類1:

public Handler1 extends Handler{

? ? @Override

? ? public void handleRequest(String condition){

? ? ? ? if (null != condition && condition.equals("condition1")){

? ? ? ? ? ? return;

? ? ? ? } else {

? ? ? ? ? ? successor.handleRequest(condition);

? ? ? ? }

? ? }

}

Handler子類2:

public Handler2 extends Handler{

? ? @Override

? ? public void handleRequest(String condition){

? ? ? ? if (null != condition && condition.equals("condition2")){

? ? ? ? ? ? return;

? ? ? ? }else {

? ? ? ? ? ? successor.handleRequest(condition);

? ? ? ? }

? ? }

}

調(diào)用例子

public class Test{

? ? public static void main(string [] args){

? ? ? ? Handler1 mHandler1 = new Handler1();

? ? ? ? Handler2 mHandler2 = new Handler2();

? ? ? ? mHandler1.successor= mHandler2;

? ? ? ? mHandler2.successor= mHandler1;

? ? ? ? mHandler2.handleRequest("condition2");

? ? }

}

通用模式

在簡化模式的基礎上:

(1)Handler子類中添加一個獲取處理請求類型(通常表現(xiàn)為權(quán)限等級)的方法

(2)對請求進行封裝,形成抽象類Request以及其對應子類,每個類中含處理體及其getter、setter方法,以及獲取請求類型(通常表現(xiàn)為權(quán)限等級)的方法

即可構(gòu)成通用模式的責任鏈模式模型代碼。


責任鏈模式的優(yōu)缺點

優(yōu)點

>請求者和處理者解耦,代碼靈活性得到提高

缺點

>請求鏈中對處理者遍歷可能太長,特別是遞歸調(diào)用,會影響性能


Android中的責任鏈模型舉例

ViewTree自上而下分發(fā)事件的機制,即View的事件分發(fā)模型


——2017.08.14

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容