C++责任链设计模式
 
什么是责任链设计模式
责任链设计模式是一种行为型设计模式,它允许多个处理请求的对象串联起来,形成一个处理请求的链。每个对象都有机会处理请求,如果该对象不能处理请求,则将请求传递给链中的下一个对象。
该模式有什么优缺点
优点
- 解耦:责任链设计模式将处理请求的对象和解耦,使得不同的对象可以独立地变化和扩展,而不需要修改其他对象的代码。
- 灵活性:责任链设计模式可以轻松地添加、删除和修改处理请求的对象,从而可以灵活地适应不同的需求。
- 顺序独立:责任链设计模式不依赖于请求的顺序,每个对象都有机会处理请求,不论请求的顺序如何。
缺点
- 可能会产生多余的传递:由于每个对象都会处理请求,因此如果请求在链中传递得太多,可能会导致性能下降。
- 可能会出现重复处理:如果多个对象都能够处理请求,那么请求可能会在链中被重复处理,导致不必要的开销。
如何使用
下面是一个使用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接口和三个具体的处理请求的类ConcreteHandler、ConcreteHandler2和ConcreteHandler3。每个类都实现了handle方法,用于判断是否能够处理请求。在main函数中,我们创建了一个包含三个处理请求的对象的责任链,并使用链来处理字符串请求。每个对象都会处理请求,直到找到能够处理请求的对象为止。

![[pymc3][python]pymc3安装后测试代码2](https://img-blog.csdnimg.cn/a828f3d5924b47d9ab45d3438cf0f49e.jpeg)











![[LeetCode]只出现一次的数字相关题目(c语言实现)](https://img-blog.csdnimg.cn/4e29f5ff21914b2c8df6b92a6808e64f.png)




