#include <iostream>
#include <vector>
// 抽象处理器
class ApprovalHandler {
public:
ApprovalHandler(ApprovalHandler* successor, double max_amount) : successor_(successor), max_amount_(max_amount) {}
virtual ~ApprovalHandler() {}
virtual void HandleApprovalRequest(double amount) = 0;
virtual void HandleRejectRequest(double amount) = 0;
protected:
ApprovalHandler* successor_;
double max_amount_;
};
// 部门经理
class DepartmentManager : public ApprovalHandler {
public:
DepartmentManager(ApprovalHandler* successor, double max_amount) : ApprovalHandler(successor, max_amount) {}
void HandleApprovalRequest(double amount) override {
if (amount <= max_amount_) {
std::cout << "Department Manager approved the request." << std::endl;
} else if (successor_ != nullptr) {
successor_->HandleApprovalRequest(amount);
}
}
void HandleRejectRequest(double amount) override {
std::cout << "Department Manager rejected the request." << std::endl;
}
};
// 财务主管
class FinancialSupervisor : public ApprovalHandler {
public:
FinancialSupervisor(ApprovalHandler* successor, double max_amount) : ApprovalHandler(successor, max_amount) {}
void HandleApprovalRequest(double amount) override {
if (amount <= max_amount_) {
std::cout << "Financial Supervisor approved the request." << std::endl;
} else if (successor_ != nullptr) {
successor_->HandleApprovalRequest(amount);
}
}
void HandleRejectRequest(double amount) override {
std::cout << "Financial Supervisor rejected the request." << std::endl;
}
};
// 总经理
class GeneralManager : public ApprovalHandler {
public:
GeneralManager(ApprovalHandler* successor, double max_amount) : ApprovalHandler(successor, max_amount) {}
void HandleApprovalRequest(double amount) override {
if (amount <= max_amount_) {
std::cout << "General Manager approved the request." << std::endl;
} else {
std::cout << "General Manager rejected the request." << std::endl;
}
}
void HandleRejectRequest(double amount) override {
std::cout << "General Manager rejected the request." << std::endl;
}
};
// 责任链管理类
class ApprovalChain {
public:
ApprovalChain() {}
void AddHandler(ApprovalHandler* handler) {
handlers_.push_back(handler);
}
void HandleApprovalRequest(double amount) {
for (auto& handler : handlers_) {
handler->HandleApprovalRequest(amount);
}
}
void HandleRejectRequest(double amount) {
for (auto& handler : handlers_) {
handler->HandleRejectRequest(amount);
}
}
private:
std::vector<ApprovalHandler*> handlers_;
};
int main() {
ApprovalChain chain;
// 添加责任链处理器
chain.AddHandler(new DepartmentManager(nullptr, 5000.0));
chain.AddHandler(new FinancialSupervisor(nullptr, 10000.0));
chain.AddHandler(new GeneralManager(nullptr, 50000.0));
// 处理请求
double amount = 6000.0;
std::cout << "Request for amount: " << amount << std::endl;
chain.HandleApprovalRequest(amount);
amount = 12000.0;
std::cout << "Request for amount: " << amount << std::endl;
chain.HandleApprovalRequest(amount);
}
【C++】【设计模式】职责链模式
最新推荐文章于 2024-07-25 17:57:45 发布