標簽: 設計模式初涉
描述性文字
定義
使多個對象都有機會處理請求,從而避免請求的發送者與接收者之間的耦合關系,
將這個對象連成一條鏈,并沿著這條鏈傳遞該請求,知道有一個對象處理它為止。
兩個角色
-
Handler:抽象處理者,定義抽象請求處理方法,還定義一個抽象處理者對象作為
其下家的引用,通過該引用,處理者可以連成一條鏈。 -
ConcreteHandler:具體處理者,處理他所負責的請求,如果可處理就處理,不能
處理就把請求轉發給下家。
UML類圖

使用場景
- 1.多個對象處理同一個請求,哪個對象處理改請求運行時刻自動確定;
- 2.在不明確指定接收者的情況下,想多個對象中的一個,提交一個請求;
- 3.處理一個請求的對象集合應被動態指定;
優缺點
優點
- 1.請求者與接收者松散耦合
- 2.可以動態組合,請求處理對象只需維持只想其后繼者的引用
- 3.擴展靈活,新增具體請求者時無需修改原有系統的代碼
缺點
- 1.產生許多細顆粒對象
- 2.不一定能被處理,可能到末端也沒被處理或者中間寫錯
- 3.比較長的責任鏈,可能涉及多個處理對象,性能問題,還有調試不方便
- 4.建鏈不當,可能造成循環調用,導致系統進入死循環;
示例代碼
寫個這種模式爛大街的例子:你問:哥哥,粑粑,麻麻拿零花錢,門檻依次是100,500和1000
然后你按照層級問他們要錢,100以下,哥哥可以給你,100以上的話你要找粑粑,500以上要找
麻麻這樣,代碼實現下~
先寫一個抽象處理者,定義一個抽象的請求方法,下一個抽象處理者的引用

接著依次實現三個具體處理者,哥哥,粑粑和麻麻



最后客戶端實例化三個具體處理者,然后依次指定下家,從哥哥開始發送請求

輸出結果

好的,關于責任鏈模式的例子非常簡單,另外責任鏈模式還分純與不純
純責任鏈,要么承擔全部責任,要么責任推個下家,不允許在某處承擔了部分
或者全部責任,然后又把責任推給下家。不純責任鏈,責任在某處部分或全部被處理后,還向下傳遞。
本節代碼示例