职责链设计模式初探
职责链设计模式是一种行为设计模式,其目的是解耦发送者和接收者,使得多个对象都有机会处理请求,从而避免请求发送者和接收者之间的紧耦合关系。在这种设计模式中,请求沿着一个对象链传递,直到有一个对象处理请求为止。
在职责链设计模式中,通常会有一个抽象处理者和多个具体处理者组成一个处理者链,每个具体处理者都有一个指向下一个处理者的指针。当有请求到达时,第一个具体处理者会尝试处理请求,如果处理不了,就会将请求传递给下一个处理者,直到有处理者处理了请求为止。
理解职责链设计模式,可以将其比喻为一个问题的解决者链。当一个问题出现时,首先交给第一个解决者去解决,如果第一个解决者解决不了,就交给下一个解决者,直到有一个解决者解决了问题。
示例代码:
#include <iostream> // 抽象处理者 class Handler { public: virtual void handleRequest(int request) = 0; void setNextHandler(Handler *next) { nextHandler = next; } protected: Handler *nextHandler; }; // 具体处理者A class ConcreteHandlerA : public Handler { public: void handleRequest(int request) override { if (request < 10) { std::cout << "ConcreteHandlerA handles the request." << std::endl; } else if (nextHandler != nullptr) { nextHandler->handleRequest(request); } } }; // 具体处理者B class ConcreteHandlerB : public Handler { public: void handleRequest(int request) override { if (request >= 10 && request < 20) { std::cout << "ConcreteHandlerB handles the request." << std::endl; } else if (nextHandler != nullptr) { nextHandler->handleRequest(request); } } }; // 具体处理者C class ConcreteHandlerC : public Handler { public: void handleRequest(int request) override { if (request >= 20) { std::cout << "ConcreteHandlerC handles the request." << std::endl; } else { std::cout << "No one can handle the request." << std::endl; } } }; int main() { Handler *handlerA = new ConcreteHandlerA(); Handler *handlerB = new ConcreteHandlerB(); Handler *handlerC = new ConcreteHandlerC(); handlerA->setNextHandler(handlerB); handlerB->setNextHandler(handlerC); handlerA->handleRequest(8); // Output: ConcreteHandlerA handles the request. handlerA->handleRequest(15); // Output: ConcreteHandlerB handles the request. handlerA->handleRequest(25); // Output: ConcreteHandlerC handles the request. delete handlerA; delete handlerB; delete handlerC; return 0; }
本文来自博客园,作者:{Justin_Hu},转载请注明原文链接:{https://www.cnblogs.com/gchenghu/}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
2021-12-12 HashMap对key或value进行排序--Java--小白必懂2