责任链模式通过请求在处理者链中传递实现解耦,C++中以抽象Handler定义接口,具体处理者继承并决定处理或转发请求,示例中主管、经理、总监按金额逐级审批,使用智能指针管理生命周期,支持动态构建链与多级处理,适用于审批流等场景。

责任链模式(Chain of Responsibility Pattern)是一种行为设计模式,它允许你将请求沿着处理者链进行传递,直到某个处理者决定处理该请求。在C++中实现责任链模式,关键是定义一个抽象处理者类,并让具体处理者在链中依次尝试处理请求。
责任链模式的核心结构
责任链模式通常包含以下角色:
Handler(抽象处理者):定义处理请求的接口,并持有下一个处理者的引用。 ConcreteHandler(具体处理者):实现处理逻辑,判断是否处理当前请求,否则转发给下一节点。 Client(客户端):创建处理链并发送请求。
基础C++实现示例
下面是一个简单的C++责任链实现,模拟审批流程:不同级别的管理者可以处理不同金额的报销申请。
#include #include // 抽象处理者class Approver {protected: std::unique_ptr next; std::string name;public: Approver(const std::string& n) : name(n) {} // 设置后继者 void setNext(std::unique_ptr nextApprover) { next = std::move(nextApprover); } // 处理请求 virtual void processRequest(double amount) = 0; // 转发请求到下一级 void passToNext(double amount) { if (next) { next->processRequest(amount); } else { std::cout << "No one can approve the request for $" << amount << "n"; } }};// 具体处理者:主管class Supervisor : public Approver {public: Supervisor() : Approver("Supervisor") {} void processRequest(double amount) override { if (amount <= 1000) { std::cout << name << " approves request for $" << amount << "n"; } else { std::cout << name << " cannot handle $" << amount << ", passing to next...n"; passToNext(amount); } }};// 具体处理者:经理class Manager : public Approver {public: Manager() : Approver("Manager") {} void processRequest(double amount) override { if (amount <= 5000) { std::cout << name << " approves request for $" << amount << "n"; } else { std::cout << name << " cannot handle $" << amount << ", passing to next...n"; passToNext(amount); } }};// 具体处理者:总监class Director : public Approver {public: Director() : Approver("Director") {} void processRequest(double amount) override { if (amount <= 20000) { std::cout << name << " approves request for $" << amount << "n"; } else { std::cout << name << " cannot handle $" << amount << ", escalating...n"; passToNext(amount); } }};
使用示例:
立即学习“C++免费学习笔记(深入)”;
int main() { // 构建责任链 auto supervisor = std::make_unique(); auto manager = std::make_unique(); auto director = std::make_unique(); supervisor->setNext(std::move(manager)); supervisor->next->setNext(std::move(director)); // 发送请求 supervisor->processRequest(500); // 主管处理 supervisor->processRequest(3000); // 经理处理 supervisor->processRequest(15000); // 总监处理 supervisor->processRequest(25000); // 无人处理 return 0;}
关键点说明与优化建议
这个模式的优势在于解耦请求发送者和接收者。你可以根据实际需求扩展功能:
使用智能指针避免内存泄漏,如示例中的 std::unique_ptr。 可在运行时动态构建链,比如从配置文件读取处理顺序。 某些场景下允许多个处理者参与(不中断链),可移除条件判断后的中断逻辑。 添加日志或审计功能,在每个处理者中记录操作。
责任链适用于审批流、事件处理、过滤器链等场景。C++中通过虚函数和多态实现灵活性,结合现代C++特性可写出清晰安全的代码。
基本上就这些。结构清晰,扩展性强,适合需要层级处理逻辑的系统。
以上就是C++怎么实现一个责任链模式_C++设计模式与责任链模式实现的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1483706.html
微信扫一扫
支付宝扫一扫