下面是一个用C++实现责任链模式的示例代码:

#include <iostream>
#include <string>

class Handler {
public:
    virtual void setNext(Handler* next) = 0;
    virtual void handleRequest(const std::string& request) = 0;
};

class ConcreteHandler1 : public Handler {
private:
    Handler* nextHandler;
public:
    ConcreteHandler1() : nextHandler(nullptr) {}
    void setNext(Handler* next) override {
        nextHandler = next;
    }
    void handleRequest(const std::string& request) override {
        if (request == "Request1") {
            std::cout << "ConcreteHandler1 handles the request." << std::endl;
        }
        else if (nextHandler != nullptr) {
            nextHandler->handleRequest(request);
        }
        else {
            std::cout << "No handler can handle the request." << std::endl;
        }
    }
};

class ConcreteHandler2 : public Handler {
private:
    Handler* nextHandler;
public:
    ConcreteHandler2() : nextHandler(nullptr) {}
    void setNext(Handler* next) override {
        nextHandler = next;
    }
    void handleRequest(const std::string& request) override {
        if (request == "Request2") {
            std::cout << "ConcreteHandler2 handles the request." << std::endl;
        }
        else if (nextHandler != nullptr) {
            nextHandler->handleRequest(request);
        }
        else {
            std::cout << "No handler can handle the request." << std::endl;
        }
    }
};

class ConcreteHandler3 : public Handler {
private:
    Handler* nextHandler;
public:
    ConcreteHandler3() : nextHandler(nullptr) {}
    void setNext(Handler* next) override {
        nextHandler = next;
    }
    void handleRequest(const std::string& request) override {
        if (request == "Request3") {
            std::cout << "ConcreteHandler3 handles the request." << std::endl;
        }
        else if (nextHandler != nullptr) {
            nextHandler->handleRequest(request);
        }
        else {
            std::cout << "No handler can handle the request." << std::endl;
        }
    }
};

int main() {
    Handler* handler1 = new ConcreteHandler1();
    Handler* handler2 = new ConcreteHandler2();
    Handler* handler3 = new ConcreteHandler3();

    handler1->setNext(handler2);
    handler2->setNext(handler3);

    handler1->handleRequest("Request1");
    handler1->handleRequest("Request2");
    handler1->handleRequest("Request3");
    handler1->handleRequest("Request4");

    delete handler1;
    delete handler2;
    delete handler3;

    return 0;
}

运行上述代码,输出结果为:

ConcreteHandler1 handles the request.
ConcreteHandler2 handles the request.
ConcreteHandler3 handles the request.
No handler can handle the request.

这个示例中,有三个具体的处理器类:ConcreteHandler1ConcreteHandler2ConcreteHandler3,它们分别负责处理"Request1"、"Request2"和"Request3"请求。每个处理器都有一个setNext方法来设置下一个处理器,当当前处理器无法处理请求时,会将请求传递给下一个处理器。

main函数中,我们创建了三个处理器对象,并通过setNext方法将它们连接成一个处理器链。然后,我们通过handleRequest方法向处理器链发送不同的请求,观察每个请求是由哪个处理器来处理。最后,我们释放了创建的处理器对象

用C++实现责任链模式

原文地址: https://www.cveoy.top/t/topic/hABu 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录