【C++】責任鏈模式

目錄

  • 一、模式核心概念與結構
  • 二、C++ 實現示例:員工請假審批系統
  • 三、責任鏈模式的關鍵特性
  • 四、應用場景
  • 五、責任鏈模式與其他設計模式的關系
  • 六、C++ 標準庫中的責任鏈模式應用
  • 七、優缺點分析
  • 八、實戰案例:Web 請求過濾器鏈
  • 九、實現注意事項
    • 如果這篇文章對你有所幫助,渴望獲得你的一個點贊!

責任鏈模式(Chain of Responsibility Pattern)是一種【行為型】設計模式,它允許你將請求沿著處理者鏈進行傳遞,直到有一個處理者能夠處理該請求為止。這種模式將請求的發送者和接收者解耦,使得多個處理者都有機會處理請求,而無需客戶端直接知道具體的處理者。

一、模式核心概念與結構

責任鏈模式包含三個核心角色:

  1. 抽象處理者(Handler):定義處理請求的接口,通常包含一個指向下一個處理者的引用。
  2. 具體處理者(Concrete Handler):實現抽象處理者接口,處理請求或轉發給下一個處理者。
  3. 客戶端(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 

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/86668.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/86668.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/86668.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

dp進階,樹形背包(dfs+01)

顧名思義&#xff0c;就是在對樹進行搜索的時候&#xff0c;由于限制了子節點選根節點必選和節點數限制&#xff0c;所以需要額外利用背包來維護最大值 假設根節點就是0&#xff0c;我們很容易 發現&#xff0c;這就是一個正常的樹求和&#xff0c;但是限制了節點數量&#xf…

微信小程序安卓手機輸入框文字飄出輸入框

最近在開發微信小程序遇到一個問題&#xff0c;安卓手機輸入框文字飄出輸入框&#xff0c;但是ios系統的手機則正常。 使用情景&#xff1a;做了一個彈窗&#xff0c;彈窗內是表單&#xff0c;需要填寫一些信息&#xff0c;但是在填寫信息時光標不顯示&#xff0c;輸入的內容飄…

3 大語言模型預訓練數據-3.2 數據處理-3.2.2 冗余去除——3.后綴數組(Suffix Array)在大模型數據去重中的原理與實戰

后綴數組&#xff08;Suffix Array&#xff09;在大模型數據去重中的原理與實戰 一、后綴數組的核心原理與數據結構二、后綴數組去重的核心流程1. **文檔預處理與合并**2. **構建后綴數組**3. **計算最長公共前綴&#xff08;LCP&#xff09;數組**4. **基于LCP檢測重復文檔** …

數據庫外連接詳解:方式、差異與關鍵注意事項

&#x1f504; 數據庫外連接詳解&#xff1a;方式、差異與關鍵注意事項 外連接用于保留至少一個表的全部行&#xff0c;即使另一表無匹配記錄。以下是三種外連接方式的深度解析&#xff1a; &#x1f50d; 一、外連接的三種類型 1. 左外連接 (LEFT OUTER JOIN) 作用&#xf…

vscode把less文件生成css文件配置,設置生成自定義文件名稱和路徑

1.下載less插件 在插件市場搜索 less 2.設置生成配置 3.修改out屬性 "less.compile": {"compress": false, // 是否刪除多余空白字符 一行顯示[壓縮]"sourceMap": false, // 是否創建文件目錄樹&#xff0c;true的話會自動生成一個 .css.map …

探索相機成像的奧秘 - 齊次坐標、徑向失真和圖像傳感器傾斜

引言 大家好&#xff01;今天我們將一起探索相機成像背后的一些關鍵技術概念&#xff1a;齊次坐標、徑向失真和圖像傳感器傾斜。這些概念對于理解相機如何捕捉和處理圖像至關重要。我們將通過簡單易懂的語言和嚴謹的公式來詳細解釋這些概念。 齊次坐標&#xff08;Homogeneou…

校企協同育人,智慧養老實訓基地助力人才就業無憂

隨著我國人口老齡化程度不斷加深&#xff0c;智慧養老產業蓬勃發展&#xff0c;對專業人才的需求日益迫切。校企協同打造智慧養老實訓基地&#xff0c;成為解決人才供需矛盾、提升人才培養質量的重要途徑。通過科學的建設方案&#xff0c;智慧養老實訓基地能夠為學生提供實踐平…

從需求到落地:一個AI訓練平臺的售前全流程復盤

目錄 一、項目背景:客戶要建自己的AI訓練平臺 二、需求梳理三板斧:并發量、存儲帶寬、模型種類 1. 并發訓練量 2. 存儲帶寬需求 3. 模型類型與參數規模 三、解決方案設計:GPU選型 + 高速網絡 + 存儲架構 ? GPU服務器選型 ? 網絡與通信架構 ? 存儲與數據緩存 四…

織夢DedeCMS轉WordPress

最近&#xff0c;有個用戶找模板兔遷移網站&#xff0c;源站用的dede&#xff0c;需要轉成wp&#xff0c;文章數量大概7000-8000篇&#xff0c;其中有個需求是保證舊文章的鏈接有效&#xff0c;在wp上的新文章與舊文章的鏈接類型不一樣&#xff0c;所以這涉及到偽靜態來處理跳轉…

installGo.sh

#!/bin/bash # 檢查是否以root用戶運行 if [ "$(id -u)" -ne 0 ]; then echo "請使用root權限運行此腳本" exit 1 fi # 檢查是否安裝了必要的工具 for cmd in curl wget tar; do if ! command -v $cmd &> /dev/null; then echo…

【技術難題】el-table的全局數據排序實現示例,不受分頁影響,以及異步請求帶來的頁面渲染問題

參考鏈接:https://blog.csdn.net/qq_35770559/article/details/131183121 問題代碼 編輯頁面detail.vue <el-form title="列表信息" name="detail"><el-form><el-form-item><el-buttontype="cyan"icon="el-icon-p…

非功能測試

非功能測試范疇&#xff1a;界面測試&#xff0c;易用性測試&#xff0c;兼容性測試&#xff0c;文檔測試&#xff0c;安裝/卸載測試等等 界面測試 1.窗體界面測試 1.窗體定義&#xff1a;指整個軟件窗口&#xff0c;也可稱為窗口&#xff0c;是界面測試的基本單位 2.控件分…

一起endpoint迷路的問題排查總結

今天上班&#xff0c;一到工位上&#xff0c;就有同事和我說有客戶反映自己的容器的一些指標在監控平臺不上報了&#xff0c;我當時一看機器所在的監控&#xff0c;發現確實是這樣 確實存在某個點開始數據就沒了&#xff0c;主要這個點當時也沒有任何的操作變更&#xff0c;于…

官方 Linker Scripts 語法和規則解析(2)

系列文章目錄 官方 Linker Scripts 語法和規則解析&#xff08;1&#xff09; 官方 Linker Scripts 語法和規則解析&#xff08;2&#xff09; 官方 Linker Scripts 語法和規則解析&#xff08;3&#xff09; 鏈接腳本(Linker Scripts)語法和規則解析(自官方手冊) 7.9. 鏈接腳…

CentOS 7 通過YUM安裝MySQL 8.0完整指南

一、準備工作&#xff1a;更新系統與YUM源 # 1. 更換阿里云鏡像源 wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo# 2. 清理并重建緩存 yum clean all yum makecache# 3. 升級系統所有包 yum -y update 二、安裝MySQL 8.0 1. 下載…

qq郵箱 新版 怎么去掉個性簽名?

qq郵箱 新版 怎么去掉個性簽名&#xff1f; 新版的qq郵箱&#xff0c;用著還不錯&#xff0c;特別是搜索&#xff0c;比以前好多&#xff0c;以前加載的時候&#xff0c;搜索框里有一行字&#xff0c;加載不完&#xff0c;就沒法搜索&#xff0c;特別菜。現在好多了。 不過現在…

C++:string類(1)

一.初步了解STL STL是Standard Template Library的縮寫&#xff0c;中文譯為標準模板庫&#xff0c;是C標準庫的重要組成部分。它本質上是一套基于模板的通用編程工具&#xff0c;通過模板技術實現了數據結構和算法的抽象與復用&#xff0c;讓開發者無需重復編寫基礎功能&…

如何避免靜態變量初始化中的異常

確保初始化表達式的安全性 基本數據類型初始化 對于基本數據類型&#xff08;如int、double、boolean等&#xff09;的靜態變量初始化&#xff0c;要確保賦值的表達式是合法的。例如&#xff0c;在初始化一個int類型的靜態變量時&#xff0c;避免出現除數為零的情況。 class Sa…

【151】基于Springboot+Vue實現的校園訂餐管理系統小程序(有文檔+PPT+視頻)

系統介紹 視頻演示 基于SpringbootVue實現的校園訂餐管理系統小程序&#xff08;有文檔PPT視頻&#xff09; 基于SpringbootVue實現的校園訂餐管理系統小程序采用前后端分離的架構方式&#xff0c;系統設計了管理員、商家、用戶三種角色&#xff0c;系統分為管理端、小程序端&…

從 0 到 1:基于 Qwen3 Embedding 的 RAG 智能問答系統搭建指南

RAGFlow 是一個基于深度文檔理解的開源 RAG&#xff08;檢索增強生成&#xff09;引擎。 與 LLM 集成后&#xff0c;它能夠提供真實的問答功能&#xff0c;并以來自各種復雜格式數據的可靠引用為支撐。 教程鏈接&#xff1a;OpenBayes 控制臺 使用云平臺:OpenBayes signup -…