职责链模式通过抽象基类定义处理接口,使用智能指针连接具体处理者,使请求沿链传递直至被处理或终止,实现发送者与接收者的解耦,适用于审批、消息路由等多处理者场景。

在C++中实现职责链模式,核心是将请求的发送者与接收者解耦,让多个对象都有机会处理请求,从而避免请求发送者与具体接收者之间的紧耦合。这种模式特别适用于有多个处理者可能处理同一请求,但具体由谁处理需在运行时决定的场景。
职责链模式的基本结构
职责链模式包含以下几个关键角色:
Handler(处理者):定义处理请求的接口,并持有下一个处理者的引用。 ConcreteHandler(具体处理者):实现处理逻辑,判断是否能处理当前请求,若不能则转发给下一节点。 Client(客户端):创建处理链并发送请求。
通过这种方式,请求沿着链传递,直到被某个处理者处理或到达链尾。
使用抽象基类和指针构建链式结构
在C++中,通常使用抽象基类来定义处理接口,再通过智能指针或原始指针连接各个处理者。
立即学习“C++免费学习笔记(深入)”;
// Handler.h#include #include iostream>class Handler {public: virtual ~Handler() = default; void setNext(std::shared_ptr next); void handleRequest(int request);protected: std::shared_ptr nextHandler; virtual bool canHandle(int request) = 0; virtual void process(int request) = 0;};void Handler::setNext(std::shared_ptr next) { nextHandler = next;}void Handler::handleRequest(int request) { if (canHandle(request)) { process(request); } else if (nextHandler) { nextHandler->handleRequest(request); } else { std::cout // ConcreteHandlers.hclass Level1Handler : public Handler {protected: bool canHandle(int request) override { return request
构建和使用处理链
客户端代码负责组装处理链,并发起请求。
#include “ConcreteHandlers.h”int main() { auto h1 = std::make_shared(); auto h2 = std::make_shared(); auto h3 = std::make_shared(); h1->setNext(h2); h2->setNext(h3); // 发送不同请求 h1->handleRequest(5); // Level1 处理 h1->handleRequest(20); // Level2 处理 h1->handleRequest(80); // Level3 处理 h1->handleRequest(150); // 无处理者处理 return 0;}
在这个例子中,请求从h1开始传递,每个处理者判断自己是否能处理,否则交给下一个。这样就实现了发送者(main函数中的调用)与最终接收者之间的解耦。
实际应用中的优化点
使用std::shared_ptr管理生命周期,避免内存泄漏。 可加入优先级机制,动态调整链顺序。 支持链的拆分与合并,适应复杂业务流程。 添加日志记录,便于调试追踪请求路径。
基本上就这些。职责链模式在审批流程、异常处理、消息路由等场景非常实用,关键是设计好处理者的判断条件和链的组织方式。不复杂但容易忽略的是边界情况处理和资源管理。
以上就是C++如何实现一个职责链模式_C++设计模式之解耦请求发送者和接收者的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1487336.html
微信扫一扫
支付宝扫一扫