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

责任链模式(Chain of Responsibility Pattern)是一种行为设计模式,它允许你将请求沿着处理者链进行传递,直到某个处理者决定处理该请求。在C++中实现责任链模式,关键是定义一个抽象处理者类,并让具体处理者在链中依次尝试处理请求。
责任链模式通常包含以下角色:
下面是一个简单的C++责任链实现,模拟审批流程:不同级别的管理者可以处理不同金额的报销申请。
#include <iostream>
#include <memory>
// 抽象处理者
class Approver {
protected:
std::unique_ptr<Approver> next;
std::string name;
public:
Approver(const std::string& n) : name(n) {}
// 设置后继者
void setNext(std::unique_ptr<Approver> 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<Supervisor>();
auto manager = std::make_unique<Manager>();
auto director = std::make_unique<Director>();
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++设计模式与责任链模式实现的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号