多语种 小语种网站推广方法,被官方认可赚钱软件,ui培训课程内容,谁会建设网站本文章属于专栏- 概述 - 《设计模式#xff08;极简c版#xff09;》-CSDN博客 模式说明
方案#xff1a; 责任链模式将请求的发送者和接收者解耦#xff0c;构成一个链条#xff0c;并由多个对象对请求进行处理#xff0c;直到找到合适的处理者为止。优点#xff1a; … 本文章属于专栏- 概述 - 《设计模式极简c版》-CSDN博客 模式说明
方案 责任链模式将请求的发送者和接收者解耦构成一个链条并由多个对象对请求进行处理直到找到合适的处理者为止。优点 实现了请求发送者和接收者的解耦灵活性高易于扩展每个处理者只需关注自己的处理逻辑。缺点 会影响性能且不易维护
本质思想责任链模式的本质思想是将多个处理者组成一条链依次尝试处理请求直到找到能够处理该请求的对象为止。
实践建议不建议使用。该模式会降低性能且分离的处理逻辑分支会降低代码可读性。当遇到逻辑复杂判断分支繁琐的逻辑我们要做的是解耦而不是把代码简单地拆开。
示例代码
#include iostream// 请求类
class Request {
public:int value;Request(int v) : value(v) {}
};// 处理者接口
class Handler {
protected:Handler* successor;public:Handler() : successor(nullptr) {}void setSuccessor(Handler* handler) {successor handler;}virtual void handleRequest(const Request req) const 0;
};// 具体处理者A
class ConcreteHandlerA : public Handler {
public:void handleRequest(const Request req) const override {if (req.value 10) {std::cout ConcreteHandlerA handles the request. std::endl;} else if (successor ! nullptr) {successor-handleRequest(req);}}
};// 具体处理者B
class ConcreteHandlerB : public Handler {
public:void handleRequest(const Request req) const override {if (req.value 10 req.value 20) {std::cout ConcreteHandlerB handles the request. std::endl;} else if (successor ! nullptr) {successor-handleRequest(req);}}
};// 客户端代码
int main() {// 构建责任链Handler* handlerA new ConcreteHandlerA();Handler* handlerB new ConcreteHandlerB();handlerA-setSuccessor(handlerB);// 发送请求Request req1(5);Request req2(15);handlerA-handleRequest(req1); // 输出ConcreteHandlerA handles the request.handlerA-handleRequest(req2); // 输出ConcreteHandlerB handles the request.// 释放内存delete handlerA;delete handlerB;return 0;
}