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

在C++中实现职责链(Chain of Responsibility)设计模式,核心是将请求的发送者与接收者解耦,让多个对象都有机会处理请求,从而避免请求者与具体处理者之间的紧耦合。这种模式通常用于构建处理流程的“链条”,每个节点决定是处理请求还是传递给下一个节点。
首先定义一个抽象基类,声明处理请求的接口,并持有对下一个处理者的引用。
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 } } };
每个子类根据自身职责判断是否处理请求,否则转发给后继者。
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++免费学习笔记(深入)”;
int main() {
FileHandler fileHandler;
PrintHandler printHandler;
SaveHandler saveHandler;
<pre class='brush:php;toolbar:false;'>// 构建处理链
fileHandler.setNext(&printHandler);
printHandler.setNext(&saveHandler);
// 发送请求
fileHandler.handleRequest("open_file"); // 被 FileHandler 处理
fileHandler.handleRequest("print"); // 被 PrintHandler 处理
fileHandler.handleRequest("save"); // 被 SaveHandler 处理
fileHandler.handleRequest("exit"); // 无人处理
return 0;}
通过这种方式,请求发送者只需知道链的第一个处理者,无需了解具体由谁处理。每个处理者只关注自己的职责范围,系统扩展性强——新增处理类型时,只需添加新类并接入链中,原有代码无需修改。
基本上就这些。职责链适合多级过滤、审批流程或事件处理系统,关键在于明确职责划分和传递逻辑。
以上就是c++++如何实现一个职责链设计模式_c++解耦请求发送者与接收者的详细内容,更多请关注php中文网其它相关文章!
c++怎么学习?c++怎么入门?c++在哪学?c++怎么学才快?不用担心,这里为大家提供了c++速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号