責任鍊模式
- 責任鍊模式結構圖
設計模式之責任鍊模式 - 示例代碼:
// 抽象處理類 public abstract class Handler { protected Handler nextHandler; public void add(Handler handler){ this.nextHandler = handler; } public abstract void HandlerRequest(String request); } // 具體處理類A public class HandlerA extends Handler{ @Override public void HandlerRequest(String request) { if ("handlerA".equals(request)){ System.out.println("HandlerA處理請求......"); } if (this.nextHandler != null){ this.nextHandler.HandlerRequest(request); } } } // 具體處理類B public class HandlerB extends Handler{ @Override public void HandlerRequest(String request) { if ("handlerB".equals(request)){ System.out.println("HandlerB處理請求......"); } if (this.nextHandler != null){ this.nextHandler.HandlerRequest(request); } } } // 測試類 public class ChainTest { public static void main(String[] args) { HandlerA handlerA = new HandlerA(); HandlerB handlerB = new HandlerB(); handlerA.add(handlerB); handlerA.HandlerRequest("handlerB"); } }
-
總結:
責任鍊模式需要一個鍊條,将需要處理的問題分開封裝到不同的類中,每個處理類隻管負責處理自己的部分,易于擴充.
優點:請求與處了解偶,鍊路結構靈活,易于調整,易于擴充請求,符合開閉原則.
缺點:責任鍊太長或處理時間太長,會影響整體性能,若存在循環引用,則會造成死循環,導緻系統崩潰.