[设计模式]责任链模式(Chain of Resposibilty)

Arduino+NRF24L01 无线遥控舵机与无刷电机系统搭建指南 本文详细介绍了使用Arduino和NRF24L01模块搭建无线遥控系统的完整指南,涵盖舵机和无刷电机的无线控制。从硬件选型、电路连接到代码编写与调试,提供了实用技巧和常见问题解决方案,帮助DIY爱好者低成本实现稳定可靠的无线遥控应用。 阅读详情

1.意图

       使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。

2.动机

       好比《大话设计模式上》的请求加薪,需要层层上交批准。这样的话请求者和响应请求者之间强耦合会生成很多判断语句。这里的目的就是要将提交请求的对象和可能提供解决措施的对象解耦。并且这样的方式可以随时修改处理一个请求的结构。增强了给对象指派职责的灵活性。

3.结构与参与者


4.效果

1)降低了耦合度

       该模式使得一个对象无需知道是哪一个对象处理其请求。对象只需知道该请求会被“正确”地处理。接收者和发送者都没有对方的明确信息,且链中的对象不需要知道链中的结构。

       结果是,职责链可简化对象的相互连接。它们仅需保持一耳光指向其后继者的引用,而不需保持它所有的候选接收者的引用。

2)增强了给对象指派职责的灵活性

       当在对象中分派职责时,职责链给你更多的灵活性。可以在运行时刻对该链进行动态的增加或修改来增加或改变处理一个请求的那些职责。也可以将这种机制与静态的特例化处理对象的继承机制结合起来使用。

3)不保证被接受

       既然一个请求没有明确的接收者,那么就不鞥保证它一定会被处理——该请求可能一直到链的末端都得不到处理。一个请求也可能因该链没有被正确配置而得不到处理。

5.实现
6.代码示例


#include <iostream>
#include <string>
#include <vector>
using namespace std;
//请求
class Request
{
public:
	string m_strContent;
	int m_nNumber;
};
//管理者
class Manager
{
protected:
	Manager* m_psuccessor;
	string m_sname;
public:
	Manager(string temp)
	{
		m_sname = temp;
	}
	void SetSuccessor(Manager* temp)
	{
		m_psuccessor = temp; 
	}
	virtual void GetRequest(Request* request) = 0;
};
//经理
class CommonManager : public Manager
{
public:
	CommonManager(string strTemp) : Manager(strTemp){}
	virtual void GetRequest(Request* request)
	{
		if ( request->m_nNumber>=0 && request->m_nNumber<10 )
		{
			cout<<m_sname<<"处理了"<<request->m_nNumber<<"个请求"<<endl;
		}
		else
		{
			m_psuccessor->GetRequest(request);
		}
	}
};
//总监
class MajorDomo : public Manager
{
public:
	MajorDomo(string name) : Manager(name){}
	
	virtual void GetRequest(Request* request)
	{
		if(request->m_nNumber>=10)
		{
			cout<<m_sname<<"处理了"<<request->m_nNumber<<"个请求"<<endl;
		}
	}
};
//客户端
int main()
{
	Manager * common = new CommonManager("经理");
	Manager * major = new MajorDomo("总监");
	
	common->SetSuccessor(major);
	
	Request* req = new Request();
	req->m_nNumber = 33;
	common->GetRequest(req);
	
	req->m_nNumber = 3;
	common->GetRequest(req);
	return 0;
}


从传统扫描到SSN:Tessent数据包技术如何减少90%测试时间 本文深入探讨了Tessent流式扫描网络(SSN)如何通过其核心的数据包技术,彻底改变芯片测试范式。该技术将测试数据封装成标准化数据包,在共享总线上进行智能路由与分发,实现了动态带宽分配与核心独立测试,从而将复杂SoC(如AI芯片)的总体测试时间大幅削减90%,并显著提升测试灵活性与可扩展性。 阅读详情

相关推荐

HFSS仿真3dB微带双分支定向耦合器学习笔记

设计一个3dB微带双分支定向耦合器,各端口微带线特性阻抗为50Ω,中心频率为5GHz,介质基板的介电常数9.6,基板厚度为0.8mm这里重点讲解HFSS的操作,关于理论知识后面文章更新。

qq_36521926的博客 7767

设计模式-责任链模式(Chain of Responsibility)

责任链模式是一种面向对象设计模式,该模式中包含了一系列处理对象和命令对象。每个处理对象都有能力决定自己可以处理哪些命令对象,如果遇到无法处理的命令对象,它会将请求传递给下一个处理对象。这种模式的核心在于避免请求发送者与接收者之间的紧密耦合,让多个对象都有可能接收请求,并将这些对象连接成一条链,沿着这条链传递请求,直到有对象处理它为止。以公司员工请假为例,员工的请假请求可能有多个领导可以批准,但每个领导的批准权限不同。员工需要根据自己要请假的天数去找对应的领导签名。这就是责任链模式的一个生动实例。

miaoyl的博客 1万+

调用D3D11硬解码和渲染VideoProcessor版本

在https://blog.youkuaiyun.com/robothn/article/details/78781321一文中使用shader来显示FFMPEG硬解码后的YUV420P,本文调用D3D11的videoprocessor来进行图像空间变换和尺寸变换,取得了较好的效果。 1.初始化D3D11设备、videodevice等数据结构 FFMPEG调用D3D11硬解码,获取其对应的device,videodevice。。。 FFMPEG使用av_hwdevice_find_type_by_name调用D3d11

zlyadvocate的博客 9283

设计模式之责任链模式(Chain Of Responsibility)

4)职责链模式常被用在框架开发中,用来实现框架的过滤器、拦截器功能,让框架的使用者在不修改源码的情况下,添加新的过滤拦截功能。3)客户类(Client)角色:创建处理链,并向链头的具体处理者对象提交请求,它不。1)抽象处理者(Handler)角色:定义一个处理请求的接口,包含抽象处理方法和。处理本次请求,如果可以处理请求则处理,否则将该请求转给它的后继者。并且每个类只需要处理自己该处理的工作,不能处理的传递给下一个对象。5)责任分担,每个类只需要处理自己该处理的工作,不能处理的传递给下一个对象完成,

liang8999的博客 3643

[UE5蓝图基础二]1.[1d混合空间] 走和跑的动画切换(shift切换)

再双击”run”进去 我们需要给他指定一个动画姿势,这里就需要给他我们前面做的”1d”混合空间,然后可以看到”1d” 上有个speed参数,代表的速度 从前面的逻辑来看需要通过控制速度来切换动画,那么必然不能写死速度,把速度提升为变量传递进来即可,所以就得到以下蓝图节点。混合空间的概念:混合空间就是可以将角色多个动画混合在一起 ,我们创建动画类就是创建个”Animation”文件夹 在文件夹内创建混合空间。我们目前要实现的是一个走和跑的功能 那么创建1d即可。到这一步混合空间已经做完 下一步做”动画蓝图”

qq_30584617的博客 3299

CCS导入工程报错?手把手教你安装C2000编译器(附最新下载链接)

本文详细解析CCS导入工程报错的常见原因,并提供三种安装C2000编译器的解决方案(TI官网离线安装、CCS内置更新和App Center渠道)。通过版本匹配技巧和路径配置要点,帮助开发者快速解决编译器缺失问题,确保项目顺利导入和编译。

weixin_30374009的博客 660

设计模式内容分享(十四):职责链模式

职责链模式在处理请求时一个处理者对象有两种行为和对一个请求的两种情况。「一个处理者对象有两种行为」处理请求将请求传递到下一节点「一个请求的两种情况」「纯的职责链模式」一个请求必须被某一个处理者对象所接收,且一个具体处理者对某个请求的处理只能采用上述两种行为之一:自己处理请求或者将请求传递到下一节点。「不纯的职责链模式」允许出现某一个具体处理者对象在「承担了请求的一部分责任后又将剩余的责任传给下家的情况」,且一个请求可以最终不被任何接收端对象所接收。

之乎者也·的博客 1702

PVE启动卡在loading initial ramdisk

pve显卡直通导致的异常解决

学而时习之 6687

设计模式-责任链模式

在Main类中,我们创建了处理器链,并将请求发送给链的第一个处理器。责任链模式可以帮助我们实现请求的处理流程的灵活性和可扩展性,每个处理器都可以选择处理请求或将请求传递给下一个处理器。2. 创建具体的处理器类,继承抽象处理器类,并实现处理请求的方法。在处理请求的方法中,可以选择将请求传递给下一个处理器或自行处理请求。1. 定义一个抽象处理器(Handler)类,其中包含一个指向下一个处理器的引用,并定义一个处理请求的方法。3. 在客户端代码中,创建处理器链,并将请求发送给链的第一个处理器。

m0_65014849的博客 646

华为OD机考真题 新系统 - 小菊的寻宝之旅(Java/Py/C/C++/Js/Go)

华为OD机试真题 新系统【小菊的寻宝之旅】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试真题 【小菊的寻宝之旅】多语言题解。

qq_45776114的博客 618

AI硬件加速:CPU vs GPU性能对比

AI硬件加速:CPU vs GPU性能对比 关键词:人工智能、硬件加速、CPU、GPU、性能对比、硬件架构、并行计算、优化策略、项目实战 摘要: 本文将深入探讨AI

AI天才研究院 1913

设计模式之责任链模式

责任链模式 是一种常用的设计模式,属于行为型模式的一种。在责任链模式中,多个对象都有机会处理请求,从而形成一条链:请求从一个对象传递到下一个对象,以此类推。这种模式允许请求的发送者和接收者解耦。在责任链模式中,请求可以被多个对象处理,知道其中一个对象负责处理它为止。

JAVA开发区的博客 1514

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

设计模式:责任链模式

责任链模式 概述 在现实生活中,常常会出现这样的事例:一个请求有多个对象可以处理,但每个对象的处理条件或权限不同。例如,公司员工请假,可批假的领导有部门负责人、副总经理、总经理等,但每个领导能批准的天数不同,员工必须根据自己要请假的天数去找不同的领导签名,也就是说员工必须记住每个领导的姓名、电话和地址等信息,这增加了难度。这样的例子还有很多,如找领导出差报销、生活中的“击鼓传花”游戏等。...

qq_29860591的博客 746

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Android中的设计模式之责任链模式

参考 《设计模式:可复用面向对象软件的基础 》5.1 Chain of responsibility 职责链 对象行为型模式 《Android源码设计模式解析与实战》第9章 使编程更有灵活性--责任链模式 意图 使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链...

weixin_33973600的博客 314

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

设计模式:责任链设计模式

责任链设计模式是一种行为型设计模式,它将请求的发送者和接收者解耦,将多个处理对象连成一条责任链,依次处理请求,直到请求被处理或者到达责任链的末尾。该模式常用于日志记录、权限验证、请求过滤等场景。责任链模式定义了一种处理请求的方式,它让多个处理对象都有机会处理请求,从而避免了请求的发送者和接收者之间的耦合关系。首先,我们需要定义一个抽象处理者接口,该接口包含一个处理请求的方法和一个设置下一个处理对象的方法。接着,我们需要定义具体的处理者类,这些类实现了抽象处理者接口,并根据具体的业务需求处理请求。

weixin_44251099的博客 1354

设计模式——责任链

OA系统的采购审批项目、职责链模式基本介绍、职责链模式解决 OA 系统采购审批项目

种一棵树最好的时间是十年前,其次是现在 3801

设计模式 - 责任链模式

责任链接的核心类,就是抽象类 IHandler、抽象类的子实现子类、还有就是业务类。当然在具体的使用前,我们需要根据业务场景灵活使用。对于每个抽象类的实现类,只需要关注自己的业务逻辑,抽象类的实现类只专注怎样做事,具体自己需要处理哪一种事,那就交给父类去决定。抽象类实现了请求传递的功能,抽象类实现请求的处理,这也是设计模式单一职责原则的体现。举例:银行里面有存款业务,然后也有很多币种类型(人民币、美元、日元)。

STRANGE-P 的博客 1186

23种设计模式-责任链(Chain of Responsibility)设计模式

23种设计模式-责任链(Chain of Responsibility)设计模式

Hanson的博客 2086

23种设计模式之职责链模式(Chain of Responsibility Pattern)

本篇文章将23种设计模式中的访问者模式,此篇文章为一天学习一个设计模式系列文章,后面会分享其他模式知识。

小威的博客 1万+

一文弄懂责任链设计模式

Reference [1] zhuanlan.zhihu.com/p/99334096, 本文主要借鉴该篇文章,如有侵权,联系删除 [2] refactoringguru.cn/design-patt… [3] c.biancheng.net/view/1383.h… 什么是责任链 责任链模式是一种行为设计模式, 允许你将请求沿着处理者链进行发送。 收到请求后, 每个处理者均可对请求进行处理, 或将其传递给链上的下个处理者。 场景 责任链的使用场景还是比较多的 多条件流程判断:权限控..

q1472750149的博客 5906

设计模式 -- 责任链模式

责任链模式(Chain of Responsibility Pattern)是一种行为型设计模式,它允许多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。在责任链模式中,每个处理器对象都包含一个指向下一个处理器对象的引用。当请求被发送时,它沿着链条依次传递,直到有一个处理器对象能够处理请求为止。责任链模式的应用场景:日志记录:将日志记录分为不同的级别,例如 DEBUG、INFO、WARN、ERROR 等级别,每个级别对应一个处理器,根据日志级别选择对应的处理器进行处理。

w5_Silence的博客 263

一文搞懂设计模式—责任链模式

责任链模式允许多个对象按照顺序处理请求,并且每个对象可以选择自己是否处理该请求或将其传递给下一个对象,这种模式将请求的发送者和接收者解耦

BookSea的博客 1963

设计模式行为型——责任链模式

责任链模式(Chain of Responsibility Pattern)又叫职责链模式是一种行为型设计模式,它通过建立一个对象链来依次处理请求,将请求的发送者和接收者解耦,并允许多个对象都有机会处理请求。其目的是为了解决请求端与实现端的解耦。其实现过程类似递归调用。责任链模式的核心是定义责任链节点的接口以及节点之间的关系,它允许动态的增加和修改责任链中的节点。

tszc95的博客 1292

【设计模式】责任链模式 ( 简介 | 适用场景 | 优缺点 | 代码示例 )

一、责任链模式简介、 二、责任链模式相关设计模式、 三、责任链模式 代码示例、 1、用户账户类、 2、校验器父类、 3、用户名校验器、 4、密码校验器、 5、电话号码校验器、 6、运行测试、

让 学习 成为一种 习惯 ( 韩曙亮 の 技术博客 ) 8590
上一篇: [设计模式]命令模式(Command)
下一篇: [设计模式]享元模式(Flyweight)
sicofield
博客等级 码龄18年 169粉丝 169原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值