责任链模式(Chain of Responsibility Pattern)为请求创建了一个接收者对象的链。这种模式给予请求的类型,对请求的发送者和接收者进行解耦。这种类型的设计模式属于行为型模式。

github源码路径:https://github.com/dangwei-90/Design-Mode

// 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//// 参考大话设计模式 - 责任链模式
// 责任链模式:有点像OA审批流畅,满足条件后一个一个往下走。#include <iostream>
#include <vector>#ifndef SAFE_DELETE
#define SAFE_DELETE(p) { if(p){delete(p); (p)=NULL;} }
#endifusing namespace std;class Handler {
public:virtual void SetNextHandler(Handler* handler) = 0;virtual void HandlerRequest(int count) = 0;protected:Handler* handler_ = nullptr;
};class FirstHandler :public Handler {
public:void SetNextHandler(Handler* handler) {handler_ = handler;}void HandlerRequest(int count) {if (count <= 10) {cout << "first handler get it: " << count << endl;}else {if (handler_ != nullptr) {handler_->HandlerRequest(count);}else {cout << "no next handler" << endl;}}}
};class SecondHandler :public Handler {
public:void SetNextHandler(Handler* handler) {handler_ = handler;}void HandlerRequest(int count) {if (count > 10 && count <= 20) {cout << "second handler get it: " << count << endl;}else {if (handler_ != nullptr) {handler_->HandlerRequest(count);}else {cout << "no next handler" << endl;}}}
};class ThirdHandler :public Handler {
public:void SetNextHandler(Handler* handler) {handler_ = handler;}void HandlerRequest(int count) {if (count >= 30) {cout << "third handler get it: " << count << endl;}else {if (handler_ != nullptr) {handler_->HandlerRequest(count);}else {cout << "no next handler" << endl;}}}
};int main()
{vector<int> nums = { 3, 10 ,2 ,54, 90, 33, 41, 5, 20 };FirstHandler* firsthandler = new FirstHandler();SecondHandler* secondhandler = new SecondHandler();ThirdHandler* thirdhandler = new ThirdHandler();firsthandler->SetNextHandler(secondhandler);secondhandler->SetNextHandler(thirdhandler);for (auto num : nums) {firsthandler->HandlerRequest(num);}SAFE_DELETE(firsthandler);SAFE_DELETE(secondhandler);SAFE_DELETE(thirdhandler);return 0;
}

[C++]责任链模式相关推荐

  1. Chain of Responsibility 责任链模式 MD

    责任链模式 简介 责任链模式是一种对象的行为模式.在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链,请求在这个链上[传递],直到链上的某一个对象决定处理此请求.发出这个请求的客户 ...

  2. Java 责任链模式

    顾名思义,责任链模式(Chain of Responsibility Pattern)为请求创建了一个接收者对象的链.这种模式给予请求的类型,对请求的发送者和接收者进行解耦.这种类型的设计模式属于行为 ...

  3. 设计模式之五 责任链模式(Chain of Responsibility)

    2019独角兽企业重金招聘Python工程师标准>>> 一. 场景 相信我们都有过这样的经历: 我们去职能部门办理一个事情,先去了A部门,到了地方被告知这件事情由B部门处理: 当我们 ...

  4. 一起学设计模式 - 责任链模式

    责任链模式(ChainOfResponsibilityPattern)属于 行为型模式的一种,将请求沿着一条链传递,直到该链上的某个对象处理它为止. 概述 定义如下:一个请求有多个对象来处理,这些对象 ...

  5. 采购申请的处理流程 --- 责任链模式

    前情提要 上集讲到小光梳理了公司的组织架构, 利用组合模式建立起了一个可扩展变化的多层的组织架构体系. 更清晰地明确了公司各个层级, 各个部门的职责. 大家明确职责, 通力合作, 让"小光热 ...

  6. 折腾Java设计模式之责任链模式

    责任链模式 顾名思义,责任链模式(Chain of Responsibility Pattern)为请求创建了一个接收者对象的链.这种模式给予请求的类型,对请求的发送者和接收者进行解耦.这种类型的设计 ...

  7. 设计模式(9)-责任链模式详解(易懂)

    责任链模式的定义 责任链模式是一种设计模式.在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链.请求在这个链上传递,直到链上的某一个对象决定处理此请求.发出这个请求的客户端并不知道 ...

  8. 最近学习了责任链模式

    2019独角兽企业重金招聘Python工程师标准>>> 前言 来菜鸟这个大家庭10个月了,总得来说比较融入了环境,同时在忙碌的工作中也深感技术积累不够,在优秀的人身边工作必须更加花时 ...

  9. 设计模式第七讲-责任链模式

    简介 责任链模式的定义:使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系 将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理他为止. 图例 责任链-根据事情大小来决 ...

  10. 工厂模式、策略者模式、责任链模式综合应用

    设计模式的具体运用: 简单工厂模式.策略者模式.责任链模式定义与使用 classLoader的具体运用 自定义的classloader 来动态加载类 程序功能设计: 在商城购物时,商城可能会在特殊的日 ...

最新文章

  1. torch cpu版加载权重
  2. Java基础05 实施接口
  3. python测速程序_Python大数据分析学习.测试程序执行速度
  4. Linux服务器安全简明指南
  5. python连oracle数据库参数变量_带绑定字符串变量的Python cx_Oracle SQL
  6. php if变量满足数组,在php中使用if()查看数组中的日期是否等于变量中存储的日期...
  7. VS中多字节字符集和UNICODE字符集的使用说明
  8. 熵值法原理、应用及其Python实现
  9. 2015校园O2O商业模式解析——从社交切入
  10. 面试时如何更好的介绍自己的项目
  11. 如何远程公司 居家办公日渐常态 企业如何做好远程办公
  12. 从零开始的unity2d写游戏1#
  13. python中 utf-8 和GBK 的关系
  14. Echarts调整饼图大小、位置和柱状图高低、柱的宽度
  15. 四足步行机器人的结构设计及仿真
  16. jdbc读取mysql数据库_Ecplise 中利用 JDBC 连接 Mysql 数据库读取数据
  17. linux系统中的挂载有什么用,linux 挂载详解
  18. Android模拟器超出电脑屏幕的解决方法
  19. PPT结尾页只会写“谢谢”?用这些结尾,让你惊艳全场
  20. what is long tail effect

热门文章

  1. 知乎轮子哥有多牛!初中写游戏,大学写编译器,毕业拿微软Offer
  2. C#中计算天干地支和生肖的方法
  3. Java项目:JSP大学生思想建设与心理健康网站
  4. 本地浏览器Websql数据库操作
  5. 获取美元人民币以及USDT人民币汇率-Python版
  6. Java SE第8章 Java集合
  7. 记录一下2020TI杯省赛
  8. Siamese-fc孪生网络目标跟踪
  9. 1.8 魔鬼训练营实践作业
  10. 图片理解数字签名和验签过程