设计模式:责任链模式(C++实现)

责任链模式(Chain of Responsibility Pattern)是一种行为设计模式,它能够将请求从一个处理者传递到下一个处理者,直到找到能够处理请求的对象为止。责任链模式可以实现请求的解耦和动态的处理链。
下面是一个简单的C++责任链模式的示例:

#include <iostream>

// 抽象处理者类
class Handler
{
protected:
    Handler *successor;

public:
    Handler() : successor(nullptr) {}
    void setSuccessor(Handler *successor)
    {
        this->successor = successor;
    }
    virtual void handleRequest(int request) = 0;
};

// 具体处理者类A
class ConcreteHandlerA : public Handler
{
public:
    void handleRequest(int request) override
    {
        if (request >= 0 && request < 10)
        {
            std::cout << "Concrete Handler A handles the request." << std::endl;
        }
        else if (successor != nullptr)
        {
            successor->handleRequest(request);
        }
    }
};

// 具体处理者类B
class ConcreteHandlerB : public Handler
{
public:
    void handleRequest(int request) override
    {
        if (request >= 10 && request < 20)
        {
            std::cout << "Concrete Handler B handles the request." << std::endl;
        }
        else if (successor != nullptr)
        {
            successor->handleRequest(request);
        }
    }
};

// 具体处理者类C
class ConcreteHandlerC : public Handler
{
public:
    void handleRequest(int request) override
    {
        if (request >= 20 && request < 30)
        {
            std::cout << "Concrete Handler C handles the request." << std::endl;
        }
        else if (successor != nullptr)
        {
            successor->handleRequest(request);
        }
    }
};

int main()
{
    Handler *handlerA = new ConcreteHandlerA();
    Handler *handlerB = new ConcreteHandlerB();
    Handler *handlerC = new ConcreteHandlerC();
    handlerA->setSuccessor(handlerB);
    handlerB->setSuccessor(handlerC);
    handlerA->handleRequest(15);
    handlerA->handleRequest(20);
    handlerA->handleRequest(5);
    delete handlerA;
    delete handlerB;
    delete handlerC;
    return 0;
}

运行结果:

Concrete Handler B handles the request.
Concrete Handler C handles the request.
Concrete Handler A handles the request.

在上述示例中,Handler是抽象处理者类,定义了处理请求的接口和设置后继处理者的方法。ConcreteHandlerA、ConcreteHandlerB和ConcreteHandlerC是具体处理者类,实现了处理请求的具体逻辑。
在handleRequest()方法中,每个具体处理者首先检查自己是否能够处理请求,如果可以处理则进行相应的处理;如果不能处理,则将请求传递给下一个处理者(successor),直到找到能够处理请求的处理者为止。
在main()函数中,创建了三个具体处理者对象handlerA、handlerB和handlerC,并通过调用setSuccessor()方法将它们连接成责任链。然后通过调用handleRequest()方法来发送请求,责任链会按照设置的顺序依次处理请求,直到找到能够处理请求的处理者为止。
责任链模式可以实现请求的解耦和动态的处理链。每个处理者只需要关注自己能够处理的请求,而不需要了解整个处理流程。责任链模式还可以灵活地增加、删除或修改处理者,使系统更加灵活和可扩展。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wydxry

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值