1. 程式人生 > >行為型模式-責任鏈模式

行為型模式-責任鏈模式

參考: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的原始碼進行分析。