定義(百度百科): 責任鏈模式是一種設計模式。在責任鏈模式里,很多對象由每一個對象對其下家的引用而連接起來形成一條鏈。請求在這個鏈上傳遞,直到鏈上的某一個對象決定處理此請求。發出這個請求的客戶端並不知道鏈上的哪一個對象最終處理這個請求,這使得系統可以在不影響客戶端的情況下動態地重新組織和分配責任。 ...
定義(百度百科):
責任鏈模式是一種設計模式。在責任鏈模式里,很多對象由每一個對象對其下家的引用而連接起來形成一條鏈。請求在這個鏈上傳遞,直到鏈上的某一個對象決定處理此請求。
發出這個請求的客戶端並不知道鏈上的哪一個對象最終處理這個請求,這使得系統可以在不影響客戶端的情況下動態地重新組織和分配責任。
UML類圖:
具體代碼:
public class Client { public static void main(String[] args) { Handler handler1 = new ConcreteHandler1(); Handler handler2 = new ConcreteHandler2(); handler1.setHandler(handler2); handler1.handlerRequest("3"); } } public abstract class Handler { public Handler successHandler; public void setHandler(Handler handler) { successHandler = handler; } public abstract void handlerRequest(String xxx); } public class ConcreteHandler1 extends Handler { @Override public void handlerRequest(String xxx) { if ("1".equals(xxx)) { System.out.println("ConcreteHandler2 處理:" + xxx); } else { successHandler.handlerRequest(xxx); } } } public class ConcreteHandler2 extends Handler { @Override public void handlerRequest(String xxx) { System.out.println("ConcreteHandler2 處理:" + xxx); } }
模塊說明:
Handler:定義一個處理請求的介面。
ConcreteHandler:處理它所負責的請求。如果可處理該請求,就處理,否則將該請求轉發給它的後繼者。
Client:向鏈上的具體處理者ConcreteHandler對象提交請求,組裝責任鏈。
適用場景:
有多個對象可以處理同一個請求,具體哪個對象處理該請求待運行時刻再確定,客戶端只需將請求提交到鏈上,而無須關心請求的處理對象是誰以及它是如何處理的。
在不明確指定接收者的情況下,向多個對象中的一個提交一個請求。
可動態指定一組對象處理請求,客戶端可以動態創建職責鏈來處理請求,還可以改變鏈中處理者之間的先後次序。
優缺點:
優點:
請求者和接受者松耦合。
動態的組合職責。
缺點:
產生了很多細粒度的對象
請求不保證在責任鏈上一定被處理掉。
總結:
分離各個責任塊的職責,對其進行鏈式的動態組合。