尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

C++责任链模式请求处理

C++责任链模式请求处理
📅 发布时间:2026/6/20 15:51:40

C++责任链模式请求处理

责任链模式将请求沿着处理器链传递,直到某个处理器处理它。这种模式解耦了请求发送者和接收者,适合日志记录、权限验证和事件过滤。

责任链包含处理器接口和具体处理器实现。

#include
#include
#include
#include

class 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", "token=abc123");
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");
}

责任链模式适合处理多层次、可动态配置的请求处理场景。

相关新闻

  • 2026在无锡旧首饰承载回忆却不再佩戴,不如变现,把预算留给当下想要的生活 - 讯息早知道
  • 2026 安庆|中考二三百分想学护理 3+2 专业,2026 官方简章发布,咨询号码多少 - 我叫小周
  • 2026在西安闲置首饰变现渠道|实体门店资质齐全,全程保密交易,确认价格秒转账 - 讯息早知道

最新新闻

  • 2027爱丁堡大学申请中介口碑实测 - 资讯速览
  • 2026 年黄石市厨卫屋顶地下室防水修缮三家横向测评:吉修匠 99.8 分五星榜首 - 吉修匠
  • 济南黄金回收靠谱榜:本地人亲测五年以上老店,附实时黄金回收价参考 - 商业快讯早知道
  • 2026年众智商学院软考中级系统集成项目管理工程师WBS工作分解结构怎么学?范围管理核心工具解析 - 众智商学院官方
  • 2026年6月最新万国中国官方售后服务电话及客服中心地址网点 - 亨得利官方服务中心
  • 2026 年驻马店市厨卫屋顶地下室防水修缮三家横向测评:吉修匠 99.8 分五星榜首 - 吉修匠

日新闻

  • 信任的进化:技术实现详解——如何用JavaScript构建博弈论模拟器
  • Terrakube自定义工作流:如何集成OPA、Infracost等工具扩展IaC能力
  • grunt-concurrent快速入门:5分钟学会并行运行Grunt任务

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号