c++如何实现一个职责链设计模式_c++解耦请求发送者与接收者

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

c++如何实现一个职责链设计模式_c++解耦请求发送者与接收者-第1张图片-佛山资讯网

在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++免费学习笔记(深入)”;

标签: ai c++

发布评论 0条评论)

还木有评论哦,快来抢沙发吧~