责任链设计模式是一种行为型设计模式,它允许多个处理请求的对象串联起来,形成一个处理请求的链。每个对象都有机会处理请求,如果该对象不能处理请求,则将请求传递给链中的下一个对象。
下面是一个使用C++实现责任链设计模式的例子:
#include
#include
// 定义处理请求的接口
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
函数中,我们创建了一个包含三个处理请求的对象的责任链,并使用链来处理字符串请求。每个对象都会处理请求,直到找到能够处理请求的对象为止。