当前位置: 首页 > news >正文

《责任链模式(极简c++)》

        本文章属于专栏- 概述 - 《设计模式(极简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;
}

http://www.lryc.cn/news/330135.html

相关文章:

  • 【学习】JMeter和Postman两种测试工具的主要区别有哪些
  • 【压缩字符串算法解析与实现】
  • test02
  • K8S Pod 水平自动扩缩容 HPA
  • Spring日志框架
  • (九)关系数据理论
  • 【经验分享】Ubuntu下如何解决问题arm-linux-gcc:未找到命令
  • 【算法刷题day10】Leetcode:232.用栈实现队列、225. 用队列实现栈
  • sql注入详解
  • [蓝桥杯 2022 省 B] 李白打酒加强版
  • 【检索增强】Retrieval-Augmented Generation for Large Language Models:A Survey
  • EVM Layer2 主流解决方案
  • go中结构体标签:omitempty、json꞉“name“、 gorm꞉“column꞉name“、yaml꞉“name“
  • 七月论文审稿GPT第4版:通过paper-review数据集微调Mixtral-8x7b,对GPT4胜率超过80%
  • 【QT学习】1.qt初识,创建qt工程,使用按钮,第一个交互按钮
  • JavaScript_与html结合方式
  • WPF —— 动画
  • 前端二维码生成工具小程序:构建营销神器的技术解析
  • 光伏发电量预测(Python代码,CNN结合LSTM,TensorFlow框架)
  • GPT带我学-设计模式11-组合模式
  • Centos7 elasticsearch-7.7.0 集群搭建,启用x-pack验证 Kibana7.4用户管理
  • [CSS]中子元素在父元素中居中
  • 电脑突然死机怎么办?
  • Kyligence 正式加入华为“同舟共济”行动计划,成为行业数智化“联盟级伙伴”
  • 大模型推理框架——text-generation-inference
  • 电梯四种事故检测YOLOV8
  • 构建docker环境下的thunder迅雷插件
  • Django开发复盘
  • 第6章 数据存储操作
  • 接口自动化框架搭建(八):pytest+allure+jenkins接入