当前位置: 首页 > news >正文

【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.lryc.cn/news/575859.html

相关文章:

  • VSCode中创建和生成动态库项目
  • CSS3实现同心圆效果
  • flink同步kafka到paimon,doris加速查询
  • RediSearch高性能全文搜索引擎
  • AI优化SEO关键词精进
  • 基于Redis分布式的限流
  • JavaScript性能优化
  • Feign 实战指南:从 REST 替代到性能优化与最佳实践
  • 【数据结构】B树的介绍及其实现C++
  • 探访成都芯谷金融中心文化科技产业园:解锁城市发展新密码
  • JDY-23蓝牙模块与电脑的连接方式
  • 024 企业客户管理系统技术解析:基于 Spring Boot 的全流程管理平台
  • JdbcUtils的三个版本
  • 3.web逆向之开发者工具调试
  • Spring-图书管理系统
  • 《Effective Python》第十章 健壮性——显式链接异常,让错误追踪更清晰的艺术
  • 电梯控制系统技术解析:从基础原理到PLC应用
  • Stable Diffusion入门-ControlNet 深入理解 第二课:ControlNet模型揭秘与使用技巧
  • 【RabbitMQ】基于Spring Boot + RabbitMQ 完成应用通信
  • .小故事.
  • Mybatis-Plus源代码走读后记
  • 青少年编程与数学 01-012 通用应用软件简介 15 人工智能助手
  • Rust交互式编程环境Jupyter Lab搭建
  • YOLOv8快速入门
  • HarmonyOS NEXT仓颉开发语言实现画板案例
  • fish安装node.js环境
  • 【开发杂谈】Auto Caption:使用 Electron 和 Python 开发实时字幕显示软件
  • Mem0: Building Production-Ready AI Agents with Scalable Long-Term Memory
  • 车联网网络安全渗透测试:深度解析与实践
  • 商品中心—15.库存分桶扣减的技术文档