1.責任鏈模式介紹
? ? ? ? 責任鏈模式(Responsibility Pattern),是十一大行為型設計模式之一。
2.責任模式定義
? ? ? ? 使多個對象都有機會處理請求,從而避免了請求的發(fā)送者和接收者之間的耦合關系。將這些對象連成一條鏈,并沿著這條鏈傳遞該請求,直到有對象處理它為止。
3.責任鏈模式的使用場景
? ? ? ? 多個對象可以處理同一請求,但具體由哪個對象處理則在運行時動態(tài)決定。
? ? ? ? 在請求處理者不明確的情況下向多個對象中的一個提交一個請求。
? ? ? ? 需要動態(tài)指定一組對象處理請求。
4.UML類圖

5.角色介紹
? ? ? ? 1.AbstractHandler:抽象處理者角色,聲明一個請求處理的方法,并在其中保持一個對下一個處理節(jié)點Hanler對象的引用。
? ? ? ? 2.ConcreteHandler:具體處理者角色,對請求進行處理,如果不能處理則將該請求轉發(fā)給下一個節(jié)點上的處理對象。
? ? ? ? 3.AbstractRequest:抽象請求者。
? ? ? ? 4.ConcreteRequest:具體請求者。
6.例子









例子分析
? ? ? ? 先聲明一個抽象處理者和一個抽象請求者。抽象處理者里引用一個請求處理的方法,同時保持一個對下一個處理節(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)》中的責任鏈模式之后的一些筆記與感悟。