C++责任链模式请求处理
C责任链模式请求处理责任链模式将请求沿着处理器链传递直到某个处理器处理它。这种模式解耦了请求发送者和接收者适合日志记录、权限验证和事件过滤。责任链包含处理器接口和具体处理器实现。#include#include#include#includeclass Request {std::string type_;std::string content_;int priority_;public:Request(const std::string type, const std::string content, int priority 0): type_(type), content_(content), priority_(priority) {}const std::string type() const { return type_; }const std::string content() const { return content_; }int priority() const { return priority_; }};class Handler {protected:std::unique_ptr next_;public:virtual ~Handler() default;Handler* set_next(std::unique_ptr handler) {next_ std::move(handler);return this;}virtual void handle(const Request request) {if (next_) {next_-handle(request);}}virtual bool can_handle(const Request request) const 0;};class LogHandler : public Handler {public:bool can_handle(const Request request) const override {return request.type() LOG;}void handle(const Request request) override {if (can_handle(request)) {std::cout [LOG] request.content() \n;} else {Handler::handle(request);}}};class AuthHandler : public Handler {public:bool can_handle(const Request request) const override {return request.type() AUTH;}void handle(const Request request) override {if (can_handle(request)) {std::cout [AUTH] Validating: request.content() \n;if (request.content().find(token) ! std::string::npos) {std::cout [AUTH] Access granted\n;} else {std::cout [AUTH] Access denied\n;}} else {Handler::handle(request);}}};class DataHandler : public Handler {public:bool can_handle(const Request request) const override {return request.type() DATA;}void handle(const Request request) override {if (can_handle(request)) {std::cout [DATA] Processing: request.content() \n;std::cout [DATA] Priority: request.priority() \n;} else {Handler::handle(request);}}};void chain_demo() {auto chain std::make_unique();chain-set_next(std::make_unique())-set_next(std::make_unique());Request r1(LOG, System startup);Request r2(AUTH, tokenabc123);Request r3(DATA, Important payload, 5);Request r4(UNKNOWN, Test request);chain-handle(r1);chain-handle(r2);chain-handle(r3);chain-handle(r4);}通用责任链使用std::function。class Filter {std::function predicate_;std::function action_;std::unique_ptr next_;public:Filter(std::function pred,std::function action): predicate_(std::move(pred)), action_(std::move(action)) {}Filter* set_next(std::unique_ptr next) {next_ std::move(next);return this;}void process(const std::string data) {if (predicate_(data)) {action_(data);} else if (next_) {next_-process(data);} else {std::cout No handler for: data \n;}}};void functional_chain_demo() {auto chain std::make_unique([](const std::string s) { return s.find(ERROR) ! std::string::npos; },[](const std::string s) { std::cout Error handler: s \n; });chain-set_next(std::make_unique([](const std::string s) { return s.find(WARN) ! std::string::npos; },[](const std::string s) { std::cout Warning handler: s \n; }))-set_next(std::make_unique([](const std::string s) { return s.find(INFO) ! std::string::npos; },[](const std::string s) { std::cout Info handler: s \n; }));chain-process(ERROR: Connection failed);chain-process(WARN: Low memory);chain-process(INFO: User logged in);chain-process(DEBUG: Variable value);}责任链模式适合处理多层次、可动态配置的请求处理场景。

相关新闻

pytest自动化测试实战:从零搭建可维护的Python测试框架

pytest自动化测试实战:从零搭建可维护的Python测试框架

1. 项目概述:为什么是pytest?如果你正在看这篇文章,大概率是已经受够了手动点点点、重复造轮子的测试工作,或者被那些庞大笨重的测试框架搞得头大。我干了十多年测试,从QTP、TestNG一路用过来,可以很负责任…

2026/6/20 15:39:20阅读更多 →
Delta-1A激光雷达+Autolabor Pro1小车的ROS SLAM建图与导航全套C++工程(含gmapping/cartographer双方案及IMU融合定位)

Delta-1A激光雷达+Autolabor Pro1小车的ROS SLAM建图与导航全套C++工程(含gmapping/cartographer双方案及IMU融合定位)

本文还有配套的精品资源,点击获取 简介:基于Ubuntu 16.04 ROS Kinetic搭建的即用型激光SLAM开发环境,专为Delta-1A单线激光雷达和Autolabor Pro1差速移动底盘优化。工程完整集成建图、实时定位与自主导航三大功能:支持gmappin…

2026/6/20 15:39:20阅读更多 →
Windows终极iOS模拟器指南:5分钟免费畅玩iPhone应用

Windows终极iOS模拟器指南:5分钟免费畅玩iPhone应用

Windows终极iOS模拟器指南:5分钟免费畅玩iPhone应用 【免费下载链接】ipasim iOS emulator for Windows 项目地址: https://gitcode.com/gh_mirrors/ip/ipasim 想要在Windows电脑上体验iOS应用生态吗?ipasim作为一款开源的跨平台iOS模拟器&#x…

2026/6/20 15:39:20阅读更多 →
Public APIs:开发者的一站式API资源宝库,突破性创新让开发效率倍增

Public APIs:开发者的一站式API资源宝库,突破性创新让开发效率倍增

Public APIs:开发者的一站式API资源宝库,突破性创新让开发效率倍增 【免费下载链接】public-apis A collaborative list of public APIs for developers 项目地址: https://gitcode.com/GitHub_Trending/publ/public-apis 在当今快速发展的数字化…

2026/6/20 16:59:34阅读更多 →
Gemma-3-12B-IT WebUI安全加固:HTTPS、IP白名单与频率限制实战

Gemma-3-12B-IT WebUI安全加固:HTTPS、IP白名单与频率限制实战

1. 项目概述:为什么你的Gemma-3-12B-IT WebUI需要安全加固?最近在折腾Gemma-3-12B-IT的WebUI部署,相信不少朋友跟我一样,在本地或者云服务器上跑通模型、看到那个简洁的交互界面能正常对话时,心里都挺有成就感。但兴奋…

2026/6/20 16:59:34阅读更多 →
零代码AI漫剧工作流:OpenClaw+Seed2.0双轨部署实战指南

零代码AI漫剧工作流:OpenClaw+Seed2.0双轨部署实战指南

1. 项目概述:为什么“零代码漫剧”在2026年突然变得可行?2026年4月,我用一台旧MacBook Air(M1芯片,8GB内存)和阿里云轻量服务器(2核4G),在没写一行Python、没配一个Docke…

2026/6/20 16:59:34阅读更多 →
GitLens配置系统深度解析:高性能分布式Git可视化架构设计与实现原理

GitLens配置系统深度解析:高性能分布式Git可视化架构设计与实现原理

GitLens配置系统深度解析:高性能分布式Git可视化架构设计与实现原理 【免费下载链接】vscode-gitlens Supercharge Git inside VS Code and unlock untapped knowledge within each repository — Visualize code authorship at a glance via Git blame annotations…

2026/6/20 16:59:34阅读更多 →
CodexBar数据导出终极指南:3步将AI使用统计转为可分析报表

CodexBar数据导出终极指南:3步将AI使用统计转为可分析报表

CodexBar数据导出终极指南:3步将AI使用统计转为可分析报表 【免费下载链接】CodexBar Show usage stats for OpenAI Codex and Claude Code, without having to login. 项目地址: https://gitcode.com/GitHub_Trending/co/CodexBar CodexBar是一款创新的开源…

2026/6/20 16:59:34阅读更多 →
嵌入式GUI开发:emWin配置从入门到精通,掌握硬件加速与调试技巧

嵌入式GUI开发:emWin配置从入门到精通,掌握硬件加速与调试技巧

1. 项目概述:为什么emWin配置是嵌入式GUI开发的基石在嵌入式系统里做图形界面开发,和你在PC上写个桌面应用完全是两码事。这里没有现成的操作系统给你管理窗口和内存,每一行代码、每一个像素的绘制,都得你自己心里有数。我接触过不…

2026/6/20 16:54:34阅读更多 →
【课程设计/毕业设计】基于 Web 的高校县志馆藏信息综合管理系统设计与实现 基于Django的青岛滨海学院特色文献捐赠流转管理系统的设计与实现【附源码、数据库、万字文档】

【课程设计/毕业设计】基于 Web 的高校县志馆藏信息综合管理系统设计与实现 基于Django的青岛滨海学院特色文献捐赠流转管理系统的设计与实现【附源码、数据库、万字文档】

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026/6/20 0:02:40阅读更多 →
MC68HC908RF2A定时器PWM生成原理与实战:无缓冲与缓冲模式详解

MC68HC908RF2A定时器PWM生成原理与实战:无缓冲与缓冲模式详解

1. 项目概述与核心价值在嵌入式开发,尤其是电机驱动、LED调光、开关电源这些需要精确控制“能量”的领域,脉冲宽度调制(PWM)技术是工程师手中的一把瑞士军刀。它的本质很简单:用一个固定频率的方波,通过改变…

2026/6/20 0:02:40阅读更多 →
在银河麒麟V10桌面(2205版本)上实战部署软RAID 1:从模块黑名单到自动挂载

在银河麒麟V10桌面(2205版本)上实战部署软RAID 1:从模块黑名单到自动挂载

1. 银河麒麟V10桌面系统与软RAID 1基础认知 第一次在银河麒麟V10桌面上折腾软RAID 1时,我踩了不少坑。这个国产操作系统基于Linux内核,但2205版本对软RAID模块做了特殊处理,需要额外操作才能正常使用。软RAID 1其实就是磁盘镜像技术&#xff…

2026/6/20 0:02:40阅读更多 →