责任链模式是一种行为型设计模式,它允许将请求沿着处理链传递,直到有一个处理器能够处理该请求。这种模式将请求的发送者和接收者解耦,同时提供了更高的灵活性和可扩展性。
责任链模式由多个处理器组成一个处理链,每个处理器负责处理特定类型的请求。当请求到达链中的一个处理器时,它可以选择处理请求,将请求传递给下一个处理器,或者终止请求的传递。
责任链模式包含以下几个关键角色:
以请假审批为例。有一个请假审批系统,由三个处理器组成,分别是部门经理、总经理和人事经理。部门经理能够处理1天以内的请假请求,总经理能够处理3天以内的请假请求,人事经理能够处理7天以内的请假请求。如果请假天数超过7天或者没有合适的处理器处理该请求,则审批不通过。
#include
// Handler(处理器)
class Approver {
public:
Approver* next; // 下一个处理器
virtual void processRequest(int days) = 0;
};
// ConcreteHandler(具体处理器)
class DepartmentManager : publicver {
public:
void processRequest(int days) {
if (days <= 1) {
std::cout << "部门经理通过审批" << std::endl;
} else if (next != nullptr) {
next->processRequest(days);
} else {
std::cout << "审批不通过" << std::endl;
}
}
};
class GeneralManager : public Approver {
public:
void processRequest(int days) {
if (days <= 3) {
std::cout << "总经理通过审批" << std::endl;
} else if (next != nullptr) {
next->processRequest(days);
} else {
std::cout << "审批不通过" << std::endl;
}
}
};
class HRManager : public Approver {
public:
void processRequest(int days) {
if (days <= 7) {
std::cout << "人事经理通过审批" << std::endl;
} else if (next != nullptr) {
next->processRequest(days);
} else {
std::cout << "审批不通过" << std::endl;
}
}
};
int main() {
// 创建处理器对象
Approver*Manager = new DepartmentManager();
Approver* generalManager = GeneralManager();
Approver* hrManager = new HRManager();
// 构处理链
departmentManager->next = generalManager;
generalManager->next = hrManager;
// 发起请假申请
int days = 5; // 请假5天
departmentManager->processRequest(days);
// 释放资源
delete departmentManager;
delete generalManager;
delete hrManager;
return 0;
}
总经理通过审批
在上述示例中,部门经理、总经理和人事经理分别充当具体处理器,实现了 Approver 接口中的 processRequest() 方法。当请假天数超过每个处理器所能处理的范围时,将请求传递给下一个处理器,直到有一个处理器能够处理该请求。
责任链模式将请求的发送者和接收者解耦,使得它们可以独立变化。同时,责任链模式也提供了一种动态组合处理链的方式,增加了灵活性和可扩展性。
上述示例模拟了一个请假审批系统,具体处理器哈哈哈,空空如也!