首页 > 后端开发 > C++ > 正文

c++如何实现一个职责链设计模式_c++解耦请求发送者与接收者

冰火之心
发布: 2025-12-23 13:37:03
原创
794人浏览过
职责链模式通过抽象基类Handler定义请求处理接口并持有后继者指针,具体子类如FileHandler根据条件决定处理或转发请求,形成链式调用结构,实现解耦。

c++如何实现一个职责链设计模式_c++解耦请求发送者与接收者

在C++中实现职责链(Chain of Responsibility)设计模式,核心是将请求的发送者与接收者解耦,让多个对象都有机会处理请求,从而避免请求者与具体处理者之间的紧耦合。这种模式通常用于构建处理流程的“链条”,每个节点决定是处理请求还是传递给下一个节点。

定义抽象处理者(Handler)

首先定义一个抽象基类,声明处理请求的接口,并持有对下一个处理者的引用。

class Handler {
protected:
    Handler* next_;
<p>public:
Handler() : next_(nullptr) {}</p><pre class='brush:php;toolbar:false;'>virtual ~Handler() = default;

void setNext(Handler* next) {
    next_ = next;
}

virtual void handleRequest(const std::string& request) = 0;
登录后复制

protected: void passToNext(const std::string& request) { if (next) { next->handleRequest(request); } else { std::cout } } };

实现具体处理者(Concrete Handlers)

每个子类根据自身职责判断是否处理请求,否则转发给后继者。

class FileHandler : public Handler {
public:
    void handleRequest(const std::string& request) override {
        if (request == "open_file") {
            std::cout << "FileHandler: Opening file...\n";
        } else {
            passToNext(request);
        }
    }
};
<p>class PrintHandler : public Handler {
public:
void handleRequest(const std::string& request) override {
if (request == "print") {
std::cout << "PrintHandler: Printing document...\n";
} else {
passToNext(request);
}
}
};</p><p>class SaveHandler : public Handler {
public:
void handleRequest(const std::string& request) override {
if (request == "save") {
std::cout << "SaveHandler: Saving file...\n";
} else {
passToNext(request);
}
}
};</p>
登录后复制

使用职责链组织处理流程

客户端代码通过串联处理者对象形成链条,请求从链头开始传递。

立即学习C++免费学习笔记(深入)”;

剪小映
剪小映

记录美好智能成片,AI智能视频剪辑

剪小映 902
查看详情 剪小映
int main() {
    FileHandler fileHandler;
    PrintHandler printHandler;
    SaveHandler saveHandler;
<pre class='brush:php;toolbar:false;'>// 构建处理链
fileHandler.setNext(&printHandler);
printHandler.setNext(&saveHandler);

// 发送请求
fileHandler.handleRequest("open_file"); // 被 FileHandler 处理
fileHandler.handleRequest("print");     // 被 PrintHandler 处理
fileHandler.handleRequest("save");      // 被 SaveHandler 处理
fileHandler.handleRequest("exit");      // 无人处理

return 0;
登录后复制

}

通过这种方式,请求发送者只需知道链的第一个处理者,无需了解具体由谁处理。每个处理者只关注自己的职责范围,系统扩展性强——新增处理类型时,只需添加新类并接入链中,原有代码无需修改。

基本上就这些。职责链适合多级过滤、审批流程或事件处理系统,关键在于明确职责划分和传递逻辑。

以上就是c++++如何实现一个职责链设计模式_c++解耦请求发送者与接收者的详细内容,更多请关注php中文网其它相关文章!

c++速学教程(入门到精通)
c++速学教程(入门到精通)

c++怎么学习?c++怎么入门?c++在哪学?c++怎么学才快?不用担心,这里为大家提供了c++速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号