← 返回博客列表

模式特点

将请求的发送者和接收者解耦,使多个对象都有机会处理请求。将这些对象连成一条链,沿着链传递请求,直到有一个对象处理它为止。

类图

类图

应用场景

示例代码(C++)

class SafetyHandler {
protected:
    SafetyHandler* m_next = nullptr;
public:
    SafetyHandler* setNext(SafetyHandler* next) { m_next = next; return next; }
    virtual bool handle(const std::string& request) {
        if (m_next) return m_next->handle(request);
        std::cout << "所有检查通过" << std::endl;
        return true;
    }
    virtual ~SafetyHandler() = default;
};

class IOCheckHandler : public SafetyHandler {
public:
    bool handle(const std::string& req) override {
        if (req.find("IO") != std::string::npos) {
            std::cout << "[IO检查] 发现IO异常,拦截!" << std::endl; return false;
        }
        std::cout << "[IO检查] 正常" << std::endl;
        return SafetyHandler::handle(req);
    }
};

class RangeCheckHandler : public SafetyHandler {
public:
    bool handle(const std::string& req) override {
        if (req.find("超限") != std::string::npos) {
            std::cout << "[范围检查] 运动超限,拦截!" << std::endl; return false;
        }
        std::cout << "[范围检查] 正常" << std::endl;
        return SafetyHandler::handle(req);
    }
};

// 构建责任链
IOCheckHandler io;
RangeCheckHandler range;
io.setNext(&range);
io.handle("正常运动");       // 依次通过
io.handle("IO 异常");        // IO检查拦截