责任链模式在C++中通过抽象处理者Handler定义处理接口和后继引用,具体处理者按需处理或转发请求,客户端调用链头即可自动流转;示例含Level1/Level2Handler及unique_ptr链式组装。

责任链模式在 C++ 中的核心是:让多个对象都有机会处理请求,避免请求发送者与接收者耦合,将这些对象连成一条链,并沿着这条链传递请求,直到有对象处理它为止。
这是责任链的基类,负责声明处理接口和持有下一个处理者的引用。关键点是“可选地”向下转发请求,由子类决定是否处理或继续传递。
每个具体类继承 Handler,重写 handleRequest():先判断是否能/应处理当前请求;若不能,调用 next->handleRequest() 转发。
链通常在客户端手动创建,也可封装进工厂或配置类。推荐使用 RAII 管理生命周期(如用 unique_ptr 构建)。
立即学习“C++免费学习笔记(深入)”;
class Handler {
protected:
std::unique_ptr<Handler> next;
public:
virtual ~Handler() = default;
Handler& setNext(std::unique_ptr<Handler> h) {
next = std::move(h);
return *this;
}
virtual void handleRequest(int request) = 0;
};class Level1Handler : public Handler {
public:
void handleRequest(int req) override {
if (req < 10) {
std::cout << "Level1 handled: " << req << "\n";
} else if (next) {
next->handleRequest(req);
}
}
};
class Level2Handler : public Handler {
public:
void handleRequest(int req) override {
if (req < 50) {
std::cout << "Level2 handled: " << req << "\n";
} else if (next) {
next->handleRequest(req);
}
}
};int main() {
auto h1 = std::make_unique<Level1Handler>();
auto h2 = std::make_unique<Level2Handler>();
h1->setNext(std::move(h2));
h1->handleRequest(5); // → Level1
h1->handleRequest(25); // → Level2
h1->handleRequest(100); // → no output (no default handler)
}基本上就这些。责任链不是必须用动态多态——C++ 还可用模板递归(编译期链)、std::variant + visitor 实现更现代的变体,但虚函数链最直观、易调试、符合经典定义。关键不在“链”的形式,而在“解耦请求与处理者”和“延迟决定谁处理”的意图。
以上就是c++++如何实现一个责任链模式_c++行为型设计模式Chain of Responsibility【源码】的详细内容,更多请关注php中文网其它相关文章!
c++怎么学习?c++怎么入门?c++在哪学?c++怎么学才快?不用担心,这里为大家提供了c++速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号