Android設計模式——責任鏈模式(十一大行為型)

1.責任鏈模式介紹

? ? ? ? 責任鏈模式(Responsibility Pattern),是十一大行為型設計模式之一。

2.責任模式定義

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

3.責任鏈模式的使用場景

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

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

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

4.UML類圖


UML類圖

5.角色介紹

? ? ? ? 1.AbstractHandler:抽象處理者角色,聲明一個請求處理的方法,并在其中保持一個對下一個處理節(jié)點Hanler對象的引用。

? ? ? ? 2.ConcreteHandler:具體處理者角色,對請求進行處理,如果不能處理則將該請求轉發(fā)給下一個節(jié)點上的處理對象。

? ? ? ? 3.AbstractRequest:抽象請求者。

? ? ? ? 4.ConcreteRequest:具體請求者。

6.例子

抽象處理者(上圖)
抽象請求者(上圖)
具體處理者1,程序員(上圖)
具體處理者2,主管(上圖)
具體處理者2,主管(上圖)
具體請求者1(上圖)
具體請求者2(上圖)
具體請求者3(上圖)
客戶端調(diào)用(上圖)

例子分析

? ? ? ? 先聲明一個抽象處理者和一個抽象請求者。抽象處理者里引用一個請求處理的方法,同時保持一個對下一個處理節(jié)點Handler對象的引用,再寫一個抽象處理方法并在實現(xiàn)類中實現(xiàn)該方法,同時也還有一個處理級別。抽象請求者里有一個需要處理的內(nèi)容,也還有一個請求級別。

? ? ? ? 在客戶端使用的時候,幾個具體處理者,需要給予下一個處理節(jié)點是誰,比如handler1.nextHandler = handler2;將處理者之間串聯(lián)起來成一條鏈,然后處理者處理請求,并根據(jù)處理級別和請求級別進行是否處理以及轉發(fā)的判斷。

7.Android源碼中的責任鏈模式

? ? ? ? Android源碼里責任鏈模式的類似體現(xiàn)莫過于對事件的分發(fā)處理,每當用戶接觸屏幕時,Android都會將對應的事件包裝成一個事件對象從ViewTree的頂部至上而下地分發(fā)傳遞。

8.總結

? ? ? ? 責任鏈模式最大的優(yōu)點就是可以對請求者和處理者關系解耦,提高代碼的靈活性。其最大的缺點就是對鏈中請求處理者的遍歷,如果處理者太多那么遍歷必定會影響性能,特別是在一些遞歸調(diào)用中需要慎重。

PS:讀《Android源碼設計模式解析與實戰(zhàn)》中的責任鏈模式之后的一些筆記與感悟。

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

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