网站规划的意义,国内做网站比较好的公司,移动端wordpress主题,站长资源平台百度C责任链设计模式
什么是责任链设计模式
责任链设计模式是一种行为型设计模式#xff0c;它允许多个处理请求的对象串联起来#xff0c;形成一个处理请求的链。每个对象都有机会处理请求#xff0c;如果该对象不能处理请求#xff0c;则将请求传递给链中的下一个对象。
该…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::vectorHandler* 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函数中我们创建了一个包含三个处理请求的对象的责任链并使用链来处理字符串请求。每个对象都会处理请求直到找到能够处理请求的对象为止。