目錄
- 一、模式核心概念與結構
- 二、C++ 實現示例:員工請假審批系統
- 三、責任鏈模式的關鍵特性
- 四、應用場景
- 五、責任鏈模式與其他設計模式的關系
- 六、C++ 標準庫中的責任鏈模式應用
- 七、優缺點分析
- 八、實戰案例:Web 請求過濾器鏈
- 九、實現注意事項
- 如果這篇文章對你有所幫助,渴望獲得你的一個點贊!
責任鏈模式(Chain of Responsibility Pattern)是一種【行為型】設計模式,它允許你將請求沿著處理者鏈進行傳遞,直到有一個處理者能夠處理該請求為止。這種模式將請求的發送者和接收者解耦,使得多個處理者都有機會處理請求,而無需客戶端直接知道具體的處理者。
一、模式核心概念與結構
責任鏈模式包含三個核心角色:
- 抽象處理者(Handler):定義處理請求的接口,通常包含一個指向下一個處理者的引用。
- 具體處理者(Concrete Handler):實現抽象處理者接口,處理請求或轉發給下一個處理者。
- 客戶端(Client):創建處理者鏈并向鏈頭發送請求。
二、C++ 實現示例:員工請假審批系統
以下是一個經典的責任鏈模式示例,演示如何用責任鏈處理不同級別的請假申請:
#include <iostream>
#include <string>
#include <memory>// 抽象處理者:管理者
class Manager {
protected:std::shared_ptr<Manager> nextManager; // 指向下一個處理者public:virtual ~Manager() = default;// 設置下一個處理者void setNextManager(std::shared_ptr<Manager> manager) {nextManager = manager;}// 處理請求的接口virtual void handleRequest(int days) const = 0;
};// 具體處理者:主管
class Supervisor : public Manager {
public:void handleRequest(int days) const override {if (days <= 3) {std::cout << "Supervisor approved " << days << " days leave" << std::endl;} else if (nextManager) {nextManager->handleRequest(days);} else {std::cout << "Request for " << days << " days cannot be handled" << std::endl;}}
};// 具體處理者:經理
class Manager : public Manager {
public:void handleRequest(int days) const override {if (days <= 10) {std::cout << "Manager approved " << days << " days leave" << std::endl;} else if (nextManager) {nextManager->handleRequest(days);} else {std::cout << "Request for " << days << " days cannot be