C++设计模式之责任链设计模式

C++责任链设计模式在这里插入图片描述

什么是责任链设计模式

责任链设计模式是一种行为型设计模式,它允许多个处理请求的对象串联起来,形成一个处理请求的链。每个对象都有机会处理请求,如果该对象不能处理请求,则将请求传递给链中的下一个对象。

该模式有什么优缺点

优点

  1. 解耦:责任链设计模式将处理请求的对象和解耦,使得不同的对象可以独立地变化和扩展,而不需要修改其他对象的代码。
  2. 灵活性:责任链设计模式可以轻松地添加、删除和修改处理请求的对象,从而可以灵活地适应不同的需求。
  3. 顺序独立:责任链设计模式不依赖于请求的顺序,每个对象都有机会处理请求,不论请求的顺序如何。

缺点

  1. 可能会产生多余的传递:由于每个对象都会处理请求,因此如果请求在链中传递得太多,可能会导致性能下降。
  2. 可能会出现重复处理:如果多个对象都能够处理请求,那么请求可能会在链中被重复处理,导致不必要的开销。

如何使用

下面是一个使用C++实现责任链设计模式的例子:

#include <iostream>  
#include <vector>  
  
// 定义处理请求的接口  
interface Handler {  
    virtual bool handle(std::string& request) = 0;  
};  
  
// 实现处理请求的具体类  
class ConcreteHandler : public Handler {  
public:  
    bool handle(std::string& request) override {  
        if (request.find("hello") != std::string::npos) {  
            std::cout << "Handling hello request" << std::endl;  
            return true;  
        }  
        return false;  
    }  
};  
  
class ConcreteHandler2 : public Handler {  
public:  
    bool handle(std::string& request) override {  
        if (request.find("world") != std::string::npos) {  
            std::cout << "Handling world request" << std::endl;  
            return true;  
        }  
        return false;  
    }  
};  
  
class ConcreteHandler3 : public Handler {  
public:  
    bool handle(std::string& request) override {  
        if (request.find("!") != std::string::npos) {  
            std::cout << "Handling exclamation mark request" << std::endl;  
            return true;  
        }  
        return false;  
    }  
};  
  
// 使用责任链设计模式的例子  
int main() {  
    std::vector<Handler*> handlers = { new ConcreteHandler(), new ConcreteHandler2(), new ConcreteHandler3() };  
  
    std::string request = "hello world!";  
  
    for (auto handler : handlers) {  
        if (handler->handle(request)) {  
            break;  
        }  
    }  
  
    for (auto handler : handlers) {  
        delete handler;  
    }  
  
    return 0;  
}

在上面的例子中,我们定义了一个Handler接口和三个具体的处理请求的类ConcreteHandlerConcreteHandler2ConcreteHandler3。每个类都实现了handle方法,用于判断是否能够处理请求。在main函数中,我们创建了一个包含三个处理请求的对象的责任链,并使用链来处理字符串请求。每个对象都会处理请求,直到找到能够处理请求的对象为止。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

早睡的叶子

你的鼓励就是我的动力

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

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

打赏作者

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

抵扣说明:

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

余额充值