【C++】责任链模式

发布于:2025-06-29 ⋅ 阅读:(24) ⋅ 点赞:(0)

责任链模式(Chain of Responsibility Pattern)是一种【行为型】设计模式,它允许你将请求沿着处理者链进行传递,直到有一个处理者能够处理该请求为止。这种模式将请求的发送者和接收者解耦,使得多个处理者都有机会处理请求,而无需客户端直接知道具体的处理者。

一、模式核心概念与结构

责任链模式包含三个核心角色:

  1. 抽象处理者(Handler):定义处理请求的接口,通常包含一个指向下一个处理者的引用。
  2. 具体处理者(Concrete Handler):实现抽象处理者接口,处理请求或转发给下一个处理者。
  3. 客户端(Client):创建处理者链并向链头发送请求。

二、C++ 实现示例:员工请假审批系统

以下是一个经典的责任链模式示例,演示如何用责任链处理不同级别的请假申请:

#include <iostream>
#include <string>
#include <memory>

// 抽象处理者:管理者
class Manager {
   
protected:
    std::shared_ptr<Manager> nextManager;  // 指向下一个处理者

public:
    virtual ~Manager() = default;
    
    // 设置下一个处理者
    void setNextManager(std::shared_ptr<Manager> manager) {
   
        nextManager = manager;
    }
    
    // 处理请求的接口
    virtual void handleRequest(int days) const = 0;
};

// 具体处理者:主管
class Supervisor : public Manager {
   
public:
    void handleRequest(int days) const override {
   
        if (days <= 3) {
   
            std::cout << "Supervisor approved " << days << " days leave" << std::endl;
        } else if (nextManager) {
   
            nextManager->handleRequest(days);
        } else {
   
            std::cout << "Request for " << days << " days cannot be handled" << std::endl;
        }
    }
};

// 具体处理者:经理
class Manager : public Manager {
   
public:
    void handleRequest(int days) const override {
   
        if (days <= 10) {
   
            std::cout << "Manager approved " << days << " days leave" << std::endl;
        } else if (nextManager) {
   
            nextManager->handleRequest(days);
        } else {
   
            std::cout << "Request for " << days << " days cannot be 

网站公告

今日签到

点亮在社区的每一天
去签到