首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

設計模式精講:責任鏈模式——靈活替代 if-else 鏈的解耦利器

     編輯:Java 相關知識

責任鏈模式讓多個對象都有機會處理請求,將請求發送者與接收者解耦。它本質上是面向對象的 if-else 鏈重構,將判斷條件分散到各處理器中,構成動態可配的處理鏈路。

一、 核心結構與處理流程

  • 抽象處理器:持有 nextHandler 引用,定義 handleRequest(Request) 模板方法:滿足條件自處理,否則傳遞給下一個。
  • 具體處理器:實現具體處理邏輯與適用條件(如權限等級、業務類型)。
  • 請求/響應對象:攜帶業務數據流轉鏈路。

二、 代碼實現:從 if-else 到責任鏈

abstract class Handler {
    private Handler next;
    public void setNext(Handler h) { next = h; }
    public final Response handle(Request req) {
        if (canHandle(req)) return doHandle(req);
        return next != null ? next.handle(req) : defaultResponse();
    }
    protected abstract boolean canHandle(Request req);
    protected abstract Response doHandle(Request req);
}

class LevelHandler extends Handler {
    private int level;
    public LevelHandler(int level) { this.level = level; }
    protected boolean canHandle(Request req) { return level >= req.getLevel(); }
    protected Response doHandle(Request req) { /* 具體業務 */ }
}

// 客戶端構建鏈
Handler h1 = new LevelHandler(1);
Handler h2 = new LevelHandler(3);
Handler h3 = new LevelHandler(5);
h1.setNext(h2); h2.setNext(h3);
h1.handle(new Request(4)); // 由 h2 處理

三、 優缺點與性能考量

優點缺點
降低耦合:發送者無需知曉具體處理者性能隱患:長鏈路需逐級判斷,高頻場景需優化
靈活配置:動態增減/調序處理器調試困難:調用棵分散,難以追蹤流轉路徑
單一職責:每個處理器專注單一業務循環引用風險:構建鏈時需防止環路

四、 實戰應用場景

  • Web 框架過濾器鏈、攔截器鏈。
  • 審批流程(按金額/角色分級審批)。
  • 異常處理鏈、日誌處理鏈。
  • 事件總線多訂閱者分發。

五、 總結

責任鏈模式以「鏈式委派」替代「集中判斷」,是處理「多條件、多層級、可擴展」業務流程的標準化方案。設計時務必明確:處理條件正交性、鏈路長度預估、默認處理策略、并發安全性。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved