[设计模式]6. C++与职责链模式(chain of rsponsibility pattern)

默默地EEer,原文地址:

http://www.cnblogs.com/hebaichuanyeah/p/5625233.html

 

职责链模式指使多个对象多有机会处理请求,避免请求发送者和接受者的耦合关系。

将这些接受处理的对象连成一条链,并沿着该链处理请求。

 

一个传说中的应用情景:

假如去政府部门办事,遇到了打字员小丽,在打LOL的小张以及主任老李,互相踢皮球推脱。

#include <iostream>
using namespace std;class Handler
{
protected:string name;Handler * successor;
public:Handler(){}virtual ~Handler(){}void setSuccessor(Handler * successor){this->successor = successor;}string getName(){return name;}virtual void HandleRequest(string str){}
};
//传说中的政府部分踢球皮球人员
class FootballPlayer : public Handler
{
public:FootballPlayer(string name){this->name = name;}virtual void HandleRequest(string str){if(name == str){cout<<this->name<<": 办理事务.."<<endl;}else if(successor != NULL){cout<<this->name<<":  这个不归我管,你去找"<<successor->getName()<<endl;successor->HandleRequest(str);}else{cout<<this->name<<":  这个办不了啦"<<endl;}}
};main()
{Handler * xiaoli = new FootballPlayer("打字员小丽");Handler * xiaozhang = new FootballPlayer("在打lol的小张");Handler * laoli = new FootballPlayer("主任老李");//小丽把皮球踢给小张xiaoli->setSuccessor(xiaozhang);xiaozhang->setSuccessor(laoli);laoli->setSuccessor(NULL);xiaoli->HandleRequest("办个事");
}

 

转载于:https://www.cnblogs.com/hebaichuanyeah/p/5625233.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/470457.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python删除为空值的列_python如何删除列为空的行

1.摘要 dropna()方法&#xff0c;能够找到DataFrame类型数据的空值&#xff08;缺失值&#xff09;&#xff0c;将空值所在的行/列删除后&#xff0c;将新的DataFrame作为返回值返回。 2.函数详解 函数形式&#xff1a;dropna(axis0, howany, threshNone, subsetNone, inplaceF…

axios请求拦截器、响应拦截器、vue-router路由导航守卫的使用(案例)

axios官方文档 一、请求拦截器 设置headers,给所有请求加上Authorization&#xff1a;token值 二、响应拦截器 直接去访问/article,发现可以进入到article内容管理页面 原因是在vue路由拦截器中&#xff0c;我们是这样来判断用户是否有权限访问除了登录页面之外的其他页面&a…

Vue项目部署,打包发布上线

参考vuecli官方文档 一、构建打包 在发布上线之前&#xff0c;我们需要执行构建打包&#xff0c;将 .less、.vue、.js 等相关资源进行编译打包&#xff0c;转换成浏览器可以直接识别运行的普通 css、js、html。 # yarn run build 或者 yarn build npm run buildVueCLI 会把打…

spring源码编译和导入eclipse

1、下载源码并解压 https://github.com/spring-projects/spring-framework/tree/v3.2.5.RELEASE 2、源码编译 cmd进入spring源码根目录&#xff0c;执行编译源码&#xff1a;gradlew build可能出现问题&#xff1a;&#xff08;1&#xff09;如果出现某些方法找不到&#xff0…

大学python教材思维导图_Python核心知识体系的14张思维导图

本文主要涵盖了 Python 编程的核心知识&#xff08;暂不包括标准库及第三方库&#xff09;。 按顺序依次展示了以下内容的一系列思维导图&#xff1a;基础知识&#xff0c;数据类型&#xff08;数字&#xff0c;字符串&#xff0c;列表&#xff0c;元组&#xff0c;字典&#x…

华为OJ平台——整形数组合并

题目描述&#xff1a; 将两个整型数组按照升序合并&#xff0c;并且过滤掉重复数组元素 输入&#xff1a; 输入说明&#xff0c;按下列顺序输入&#xff1a;    1 输入第一个数组的个数    2 输入第一个数组的数值    3 输入第二个数组的个数    4 输入第二个数…

python 函数式编程包_python 函数支持函数式编程的包operator partial

itemgetter和attrgetter能替代从序列中取出元素或读取对象属性的lambda表达式&#xff0c;会自动构建函数 itemgetter 1&#xff0c;根据元组某个字段给元组列表排序&#xff0c;下例中 itemgetter(1) lambda field : field[1] 2,如果把多个参数传给itemgetter ,它构建的函数会…

Node中使用token(基于第三方包jsonwebtoken)

一、jsonwebtoken 用于生成token&#xff08;加密&#xff09; > jsonwebtoken 1. 安装 npm i jsonwebtoken --save 2. 使用 2.1 引入 2.2 加密 用户登录成功后&#xff0c;后端生成token&#xff0c;返回给前端 二、passport、passport-jwt 用于验证token&#xff0…

concurrently同时开启多个监听服务

当我们使用nodejs和vue混合开发的时候。当要同时启动后台服务&#xff0c;和前端服务的时候&#xff0c;我们可以使用concurrently 一、安装concurrently包 npm install concurrently --save-dev 二、配置 配置vuecli创建的项目中的packag.json文件&#xff1a; 2. 配置node…

vue-cli4.x 中 配置允许跨域请求

在项目根目录下创建vue.config.js文件&#xff1a; vue.config.js: module.exports {devServer: {host: localhost,port: 8080,https: false,open: false, // 配置自动启动浏览器hotOnly: true, // 是否热更新proxy: {/api: { // 路径中有 /api 的请求都会走这个代理target: …

怎样不停请求接口实现实时刷新_快狗打车实时数仓和基于Hologres的数据服务建设...

前言 数据的实时化是最近几年数据行业很重要的趋势&#xff0c;我们在去年底也建立起新一代的实时数仓&#xff0c;但是在数据应用上一直没有取得很大的突破&#xff0c;我们希望实时数仓不仅仅是支撑大屏、核心实时报表、个别实时应用等简单的场景&#xff0c;希望更大…

Vuex在项目中使用

案例1&#xff1a; 案例2&#xff1a; Token 是用户登录成功之后服务端返回的一个身份令牌&#xff0c;在项目中的多个业务中需要使用到 校验页面的访问权限 访问需要授权的 API 接口 … 但是我们只有在第一次用户登录成功之后才能拿到 Token。 所以为了能在其它模块中获取…

Vue移动端项目——Vant 移动端 REM 适配

Vant官方文档 Vant 中的样式默认使用 px 作为单位&#xff0c;如果需要使用 rem 单位&#xff0c;推荐使用以下两个工具&#xff1a; postcss-pxtorem 是一款 postcss 插件&#xff0c;用于将 px 单位转化为 rem lib-flexible 用于设置 rem 基准值 下面我们分别将这两个工具配…

Win7_刻录DVD

1、刻录 临时文件夹&#xff1a; 1.1、C:\Users\具体的用户名\AppData\Local\Microsoft\Windows\Burn 1.2、双击 插入刻录盘的光驱&#xff0c;直接将文件复制到 这里&#xff0c;实际上也就是 复制到 上面的文件夹中。 2、UltraISO 的 路径&#xff1a; C:\Users\33\AppData\L…

findbugs使用_FindBugs,一个帮你找bug的IDEA插件

前言 Findbugs很多人都并不陌生&#xff0c;Eclipse中有插件可以帮助查找代码中隐藏的bug&#xff0c;IDEA中也有这款插件。这个插件可以帮助我们查找隐藏的bug,比较重要的功能就是查找潜在的null指针。 在编写代码的过程中,我们可能不会一直记得检查空的引用,在我们测试时可能…

Vue移动端项目——字体图标的使用

使用 iconfont 制作字体图标 设计师为我们单独提供了设计稿中的图标&#xff0c;为了方便使用&#xff0c;我们在这里把它制作为字体图标。 制作字体图标的工具有很多&#xff0c;在这里我们推荐大家使用&#xff1a;https://www.iconfont.cn/。 &#xff08;1&#xff09;登…

docker 虚拟机搭建mongodb一主一从一复制_云计算学习路线图素材课件:Docker容器应用场景分析...

Docker容器是一个开源的应用容器引擎&#xff0c;它能够自动执行重复性任务&#xff0c;例如搭建和配置开发环境&#xff0c;用户可以方便地创建和使用容器&#xff0c;还可以进行版本管理、复制、分享、修改。有很多初学云计算的同学不清楚Docker容器的使用方法以及应用场景&a…

Vue项目中 css样式的作用域(深度作用选择器)

vue官方文档 父组件对子组件设置的样式&#xff0c;只能作用到子组件的根节点上&#xff01;&#xff01;&#xff01;

git 提交文件_git原理与实战

一&#xff0c;序言之前在工作中也接触过git&#xff0c;但是没有在现公司这里用的功能这么多。主要的差异体现在如下两个方面&#xff1a;1&#xff0c;之前公司使用git主要基于图形用户界面&#xff0c;这对于处理冲突非常有帮助&#xff0c;不太容易改错地方&#xff1b;而现…

CSS——设置第一个以外的元素样式:not(:first-child),设置最后一个除外的元素样式:not(:last-child)

设置第一个以外的元素样式:not(:first-child),设置最后一个除外的元素样式:not(:last-child)