行為型模式-責任鏈模式
阿新 • • 發佈:2018-12-19
參考:https://www.jianshu.com/p/7fa31c57cbb5
1.定義
一個請求沿著一條“鏈”傳遞,直到該“鏈”上的某個處理者處理它為止。
2.介紹
- 責任鏈模式屬於行為型模式。
- 多個物件中,每個物件都持有下一個物件的引用,這就構成了鏈這種結構。
- 一個請求通過鏈的頭部,一直往下傳遞到鏈上的每一個結點,直到有某個結點對這個請求做出處理為止,這就是責任鏈模式。
- 責任鏈模式一般分為處理者與請求者。具體的處理者分別處理請求者的行為。
3.UML類圖
角色說明:
- Handler(抽象處理者):抽象類或者介面,定義處理請求的方法以及持有下一個Handler的引用.
- ConcreteHandler1,ConcreteHandler2(具體處理者):實現抽象處理類,對請求進行處理,如果不處理則轉發給下一個處理者.
- Client (客戶端):即要使用責任鏈模式的地方。
4.實現
以送快遞為例,單個快遞員只負責某個片區的快遞,若某個快遞目的地不屬於當前的片區,則交給下一個快遞員來處理,直到有人處理為止。
5. 應用場景
- 多個物件處理同一請求時,但是具體由哪個物件去處理需要執行時做判斷。
- 具體處理者不明確的情況下,向這組物件提交了一個請求。
6. 優點
- 程式碼的解耦,請求者與處理者的隔離分開。
- 易於擴充套件,新增處理者往鏈上加結點即可。
7. 缺點
- 責任鏈過長的話,或者鏈上的結點判斷處理時間太長的話會影響效能,特別是遞迴迴圈的時候。
- 請求有可能遍歷完鏈都得不到處理。
8. Android中的原始碼分析
- Android中的事件分發機制就是類似於責任鏈模式。
- 另外,OKhttp中對請求的處理也是用到了責任鏈模式,有興趣的可以去看下OKhttp的原始碼。後面有時間也會對OKhttp的原始碼進行分析。