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

Java 責任鏈模式深度解析與實戰應用

     編輯:Java 相關知識

什麼是責任鏈模式?

責任鏈模式是一種行為型設計模式,它將多個處理對象串聯成一條鏈,請求沿著鏈路傳遞,直到某個對象決定處理該請求為止。發起請求的客戶端無需知道具體由哪個對象處理,從而實現請求發送者與接收者的解耦,系統可靈活地動態調整處理邏輯與職責分派。

生活中的責任鏈原型

購房流程即是典型例子:客戶向銷售提出折扣需求,銷售有權處理則直接回應;權限不足則上報銷售總監;若金額極大,總監再轉請 CEO 批准。客戶始終只與銷售對接,不知最終由誰拍板,這正是責任鏈解耦的核心價值。

核心角色與結構

  • Handler(抽象處理者):定義處理請求的介面,持有對下一個處理者的引用。
  • ConcreteHandler(具體處理者):實際處理請求,若無權處理則轉發給繼任者。
  • Client(客戶端):發起請求,只需知道鏈的入口。

Java 代碼實戰:差旅報銷審批系統

1. 定義抽象領導類

package com.pattern.chain;

public abstract class Leader {
    protected Leader nextHandler; // 上級領導引用

    public final void handleRequest(int money) {
        if (money <= limit()) {
            handle(money); // 權限內直接處理
        } else if (nextHandler != null) {
            nextHandler.handleRequest(money); // 轉交上級
        }
    }

    /** 審批額度上限 */
    public abstract int limit();

    /** 具體審批邏輯 */
    public abstract void handle(int money);
}

2. 實現各層級審批者

// 組長:1000 元額度
public class GroupLeader extends Leader {
    @Override public int limit() { return 1000; }
    @Override public void handle(int money) {
        System.out.println("組長批准報銷:" + money + " 元");
    }
}

// 主管:5000 元額度
public class Director extends Leader {
    @Override public int limit() { return 5000; }
    @Override public void handle(int money) {
        System.out.println("主管批准報銷:" + money + " 元");
    }
}

// 經理:10000 元額度
public class Manager extends Leader {
    @Override public int limit() { return 10000; }
    @Override public void handle(int money) {
        System.out.println("經理批准報銷:" + money + " 元");
    }
}

// CEO:無上限
public class CEO extends Leader {
    @Override public int limit() { return Integer.MAX_VALUE; }
    @Override public void handle(int money) {
        System.out.println("CEO 批准報銷:" + money + " 元");
    }
}

3. 客戶端組裝鏈路並發起請求

public class ExpenseClient {
    public static void main(String[] args) {
        // 建立責任鏈:組長 → 主管 → 經理 → CEO
        Leader groupLeader = new GroupLeader();
        Leader director = new Director();
        Leader manager = new Manager();
        Leader ceo = new CEO();

        groupLeader.nextHandler = director;
        director.nextHandler = manager;
        manager.nextHandler = ceo;

        // 測試不同金額
        groupLeader.handleRequest(500);    // 組長處理
        groupLeader.handleRequest(5000);   // 主管處理
        groupLeader.handleRequest(50000);  // CEO 處理
    }
}

模式優缺點總結

優點缺點
降低耦合度,發送者無需知曉接收者細節 請求可能不被處理(鏈尾無人負責)
簡化對象關係,每個節點只關注自身職責 鏈路過長影響性能,且難以調試
動態調整鏈路結構,靈活分配職責 循環引用風險導致死循環

適用場景

  • 多個對象可處理同一請求,具體處理者由運行時決定
  • 需動態指定處理順序(如:權限審批、日誌過濾、異常處理、Servlet Filter 鏈)

責任鏈模式通過「推卸責任」的優雅方式,實現了職責的動態分流與解耦,是構建靈活可擴展系統的重要利器。

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