h5网站开发价格,大庆做网站找谁,网络公司 给 客户网站备案,做饮品的网站简介
责任链模式是一种行为型设计模式#xff0c;它允许将请求沿着处理链传递#xff0c;直到有一个处理器能够处理该请求。这种模式将请求的发送者和接收者解耦#xff0c;同时提供了更高的灵活性和可扩展性。
描述
责任链模式由多个处理器组成一个处理链#xff0c;每…简介
责任链模式是一种行为型设计模式它允许将请求沿着处理链传递直到有一个处理器能够处理该请求。这种模式将请求的发送者和接收者解耦同时提供了更高的灵活性和可扩展性。
描述
责任链模式由多个处理器组成一个处理链每个处理器负责处理特定类型的请求。当请求到达链中的一个处理器时它可以选择处理请求将请求传递给下一个处理器或者终止请求的传递。
原理
责任链模式包含以下几个关键角色
Handler处理器定义了处理请求的接口并持有下一个处理器的引用。ConcreteHandler具体处理器实现了Handler接口具体处理请求的逻辑。如果能处理请求则处理否则将请求传递给下一个处理器。
类图 示例
以请假审批为例。有一个请假审批系统由三个处理器组成分别是部门经理、总经理和人事经理。部门经理能够处理1天以内的请假请求总经理能够处理3天以内的请假请求人事经理能够处理7天以内的请假请求。如果请假天数超过7天或者没有合适的处理器处理该请求则审批不通过。
#include iostream// 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() 方法。当请假天数超过每个处理器所能处理的范围时将请求传递给下一个处理器直到有一个处理器能够处理该请求。
结论
责任链模式将请求的发送者和接收者解耦使得它们可以独立变化。同时责任链模式也提供了一种动态组合处理链的方式增加了灵活性和可扩展性。
应用场景
有多个对象可以处理请求并且不确定哪个对象能处理请求时可以使用责任链模式。需要避免请求发送者与接收者之间的耦合以及想防止请求的发送者明确地指定接收者时可以使用责任链模式。需要动态组合处理链以及简化处理者之间的交互时。
上述示例模拟了一个请假审批系统具体处理器哈哈哈空空如也