职责链模式通过抽象基类Handler定义请求处理接口并持有后继者指针,具体子类如FileHandler根据条件决定处理或转发请求,形成链式调用结构,实现解耦。

在C++中实现职责链(Chain of Responsibility)设计模式,核心是将请求的发送者与接收者解耦,让多个对象都有机会处理请求,从而避免请求者与具体处理者之间的紧耦合。这种模式通常用于构建处理流程的“链条”,每个节点决定是处理请求还是传递给下一个节点。
定义抽象处理者(Handler)
首先定义一个抽象基类,声明处理请求的接口,并持有对下一个处理者的引用。
class Handler {
protected:
Handler* next_;
<p>public:
Handler() : next_(nullptr) {}</p><pre class='brush:php;toolbar:false;'>virtual ~Handler() = default;
void setNext(Handler* next) {
next_ = next;
}
virtual void handleRequest(const std::string& request) = 0;登录后复制
protected: void passToNext(const std::string& request) { if (next) { next->handleRequest(request); } else { std::cout } } };
实现具体处理者(Concrete Handlers)
每个子类根据自身职责判断是否处理请求,否则转发给后继者。
class FileHandler : public Handler {
public:
void handleRequest(const std::string& request) override {
if (request == "open_file") {
std::cout << "FileHandler: Opening file...\n";
} else {
passToNext(request);
}
}
};
<p>class PrintHandler : public Handler {
public:
void handleRequest(const std::string& request) override {
if (request == "print") {
std::cout << "PrintHandler: Printing document...\n";
} else {
passToNext(request);
}
}
};</p><p>class SaveHandler : public Handler {
public:
void handleRequest(const std::string& request) override {
if (request == "save") {
std::cout << "SaveHandler: Saving file...\n";
} else {
passToNext(request);
}
}
};</p>登录后复制
使用职责链组织处理流程
客户端代码通过串联处理者对象形成链条,请求从链头开始传递。
立即学习“C++免费学习笔记(深入)”;
版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。
还木有评论哦,快来抢沙发吧~