用代码和UML图化解设计模式之《责任链模式》

AVL-Excite新手必看:5步搞定发动机阀系系统建模(附B站视频教程) 本文为AVL-Excite新手提供发动机阀系系统建模的5步详细指南,涵盖软件环境搭建、基本结构建立、关键参数设置、仿真分析及常见问题排查。通过清晰的步骤说明和实用技巧,帮助工程师快速掌握建模方法,并附有精选B站视频教程链接,便于实践学习。 阅读详情


责任链模式,用我的理解就是动作的处理链表。根据请求的不同类型,在链表查找相应类型的处理者。处理者是一个链表。

wiki上说明

wikipedia的定义为:CoR pattern consists of a source of command objects and a series of processing objects. Each processing object contains a set of logic that describes the types of command objects that it can handle, and how to pass off those that it cannot handle to the next processing object in the chain. A mechanism also exists for adding new processing objects to the end of this chain.

 

用下面的一个图来解释

 

基本的UML图为

// ChainofResponsibility.cpp : 定义控制台应用程序的入口点。
//************************************************************************/    
/* @filename    ChainofResponsibility.cpp
@author       wallwind  
@createtime    2012/11/6 11:58
@function     责任链模式
@email       wochenglin@qq.com  
@weibo      @成林有理想
*/    
/************************************************************************/

#include "stdafx.h"
#include <iostream>

using namespace std;

class IChain
{
public:
	IChain():m_nextChain(NULL)
	{

	}
	virtual ~IChain()
	{
		if (m_nextChain !=NULL)
		{
			delete m_nextChain;
			m_nextChain = NULL;
		}
	}

	void setChainHandler(IChain* handler)
	{
		m_nextChain = handler;
	}
	virtual void handleReq(int reqtype) = 0;

	
protected:
	IChain* m_nextChain;
	
};

class FirstHandler:public IChain
{
public:
	FirstHandler():IChain()
	{
	}
	virtual ~FirstHandler(){}

	virtual void handleReq(int reqtype)
	{
		if (reqtype <3)
		{
			cout<<"FirstHandler::handleReq"<<endl;
		}
		else if (m_nextChain !=NULL)
		{
			m_nextChain->handleReq(reqtype);
		}
		else
		{
			cout<<"no handler"<<endl;
		}
	}
};

class SecondHandler:public IChain
{
public:
	SecondHandler():IChain()
	{
		
	}
	virtual ~SecondHandler(){}

	virtual void handleReq(int reqtype)
	{
		if (reqtype <7)
		{
			cout<<"SecondHandler::handleReq"<<endl;
		}
		else if (m_nextChain !=NULL)
		{
			m_nextChain->handleReq(reqtype);
		}
		else
		{
			cout<<"no handler"<<endl;
		}
	}


	
};

class ThirdHandler:public IChain
{
public:
	ThirdHandler():IChain()
	{
	}
	virtual ~ThirdHandler(){}

	virtual void handleReq(int reqtype)
	{
		if (reqtype <9)
		{
			cout<<"ThirdHandler::handleReq"<<endl;
		}
		else if (m_nextChain !=NULL)
		{
			m_nextChain->handleReq(reqtype);
		}
		else
		{
			cout<<"no handler"<<endl;
		}
	}


};

int _tmain(int argc, _TCHAR* argv[])
{

	IChain *p1handler= new FirstHandler;
	IChain *p2handler= new SecondHandler;
	IChain *p3handler= new ThirdHandler;

	p1handler ->setChainHandler(p2handler);
	p2handler->setChainHandler(p3handler);

	p3handler ->handleReq(4);

	delete p1handler,p2handler,p3handler;
	return 0;
}

 

 

 

UNet改进(23):如何用SLCAM模块提升UNet的分割性能 本文提出一种改进的UNet架构,通过引入轻量化注意力模块(SLCAM)增强医学图像分割性能。SLCAM整合了通道和空间双重注意力机制:通道注意力采用全局池化和共享MLP学习通道权重,空间注意力通过7×7卷积捕捉上下文信息。网络在传统UNet基础上,在每个下采样和上采样块后加入SLCAM模块,并保持跳跃连接结构。实验表明,该方法能自适应聚焦重要特征,在不显著增加计算负担的情况下提升分割精度,特别适用于医学图像等需精确边界的场景。未来可探索三维注意力、动态参数调整等改进方向。 阅读详情

相关推荐

【超详细】基于YOLOv8的PCB缺陷检测

印刷电路板(PCB)瑕疵数据集:是一个公共的合成PCB数据集,由北京大学发布,其中包含1386张图像以及6种缺陷(缺失孔,鼠标咬伤,开路,短路,杂散,伪铜),用于检测,分类和配准任务。本文我们选取了其中适用与检测任务的693张图像,随机选择593张图像作为训练集,100张图像作为验证集。

weixin_45679938的博客 2万+

Java设计模式之责任链模式(UML类图分析+代码详解)

职责链模式(Chain of Responsibility Pattern), 又叫 责任链模式,为请求创建了一个接收者 对象的链(简单示意图)。这种模式对请求的 发送者和接收者进行解耦。职责链模式通常每个接收者都包含对另一个接 收者的引用。如果一个对象不能处理该请求, 那么它会把相同的请求传给下一个接收者,依 此类推。这种类型的设计模式属于行为型模式。

m0_51750419的博客 5687

SAP ALV表格F4搜索帮助不触发DATA_CHANGE?3步排查搞定

本文针对SAP ALV表格中F4搜索帮助选择值后,DATA_CHANGE事件不触发的经典问题,提供了三步系统性排查方法。核心在于理解F4值回写机制,并需在事件处理中手动填充修改表以通知ALV控件数据变更,从而确保后续校验、自动计算等依赖DATA_CHANGE的逻辑能正常执行。

c2d3e4f的博客 1133

设计模型之责任链模式含UML完整实例)

设计模型之责任链模式 1. 责任链模式 1.1 定义与特点   责任链(Chain of Responsibility)模式的定义:为了避免请求发送者与多个请求处理者耦合在一起,将所有请求的处理者通过前一对象记住其下一个对象的引用而连成一条链;当有请求发生时,可将请求沿着这条链传递,直到有对象处理它为止。   注意:责任链模式也叫职责链模式。   在责任链模式中,客户只需要将请求发送到责任链上即可...

atu1111的博客 4839

RC电路(一):微分|积分

的取值不同,会导致输出波形和输入波形之间的关系也不同,由此也会产生不同的应用。输出为0,随着电容充满电,运放-输入端得到的分压为正最大值,可等效成一个电压源,且电压不可突变,此时电流反向为最大值,开始充电时的容抗为0,电压不可突变则电压差为0,运放。开始充电时的容抗为0,电压不可突变则电压差为0,运放。输入端得到的分压也不可突变,随着电容放完电,于是。,因电容上电压不能突变(来不及充电,相当于短路,由上分析可得积分运算电路中,输出为运放的负最大峰值,随着电容充满电,输出为运放的正最大峰值,随着电容放完电,

既有随处可栖的江湖,也有追风逐梦的骁勇! 1万+

199、医疗内窥镜影像:微型镜头与高色彩保真度的ISP定制化方案

医疗内窥镜影像系统开发面临三大光学挑战:衍射极限导致分辨率下降,微型镜头色差严重,镀膜不足引发红外漏光。团队通过定制化ISP方案解决问题:采用分区色差补偿、红外泄露补偿技术,开发12区域分段颜色校正矩阵,并设计自适应伽马曲线。关键经验包括锁定白平衡避免术中偏色,优化FPGA流水线确保30fps流畅度,强调光学标定优先于算法优化。最终方案使DeltaE降至3以下,满足医生对组织颜色细微差异的识别需求,尤其解决了血管与脂肪边界辨识难题。

zzfmlxs的博客 265

责任链模式——使编程更有灵活性

将这样一种结构应用于编程领域,将每一个节点看作是一个对象,每一个对象拥有不同的处理逻辑,将一个请求从链式的首端发出,沿着链的路径依次传递给每一个节点对象,直至有对此处理这个请求为止,我们将这样的一种模式称之为责任链模式,这样的解释是不是更通俗易懂呢?对于一条责任链来说,一个请求最终只有两张情况,一是被某个处理对象所处理,另一个是所有对象均未对其处理,对于前一种情况我们称该责任链为纯的责任链,对于后一种情况我们称为不纯的责任链,在实际应用中,我们所见到的责任链模式大多为不纯的责任链。

qq_34368586的博客 798

控制科学与工程(自动化)保研经验【4】——浙大篇

控制科学与工程(自动化)保研经验【4】——浙大篇

Control Everything 1万+

设计模式-责任链模式

当程序需要使用不同方式处理不同种类请求,而且请求类型和顺序预先未知的时候、当必须按照顺序执行多个处理者的时候、如果所需处理者及其顺序必须在运行时进行改变的时候,我们可以使用责任链模式。它实现了请求发送者和处理者之前的耦合,使各个责任链对象可以专注于自己的事情,同时可以动态对对象个数、顺序做操作。但对代码结构和设计要求更多了,你不能把链变成一个环,那请求就会一直在里面循环。同时作为客户端来讲你的请求也可能无法达到链尾,或者直到链尾都未被处理。

gs19990923的博客 393

基于深度学习的茶叶等级检测识别系统:YOLOv10 + UI界面 + 数据集

YOLOv10是YOLO系列的最新版本,继承了YOLO模型的优点,并对速度和精度进行了优化。YOLOv10在目标检测中使用卷积神经网络(CNN)作为基础,通过改进网络结构和优化训练策略,实现了在更低的延迟下进行高精度的目标检测。本文详细介绍了基于YOLOv10的茶叶等级检测与识别系统的设计与实现过程。我们从数据集准备、模型训练与推理、UI界面设计等多个方面进行了详细讲解,并给出了相应的代码实现。通过本系统,我们可以高效地自动检测茶叶的等级,并通过UI界面直观地展示结果。

YOLO 765

车辆重识别/再辨识数据集: Vehicle Re-ID Datasets Collection

车辆数据库 1.VERI-Wild: A Large Dataset and a New Method for Vehicle Re-Identification in the Wild (2019-CVPR) 数据库名称:VERI-Wild 论文:链接 数据库描述: 车辆图像由一个包含174个摄像机,拍摄范围覆盖超过200平方公里的市区CCTV系统拍摄。摄像机是24小时连续拍摄30天,其长时间的...

AI炼丹师 6857

Java设计模式之行为型-责任链模式(UML类图+案例分析)

责任链模式是一种行为设计模式,它允许你将请求沿着处理者链进行发送。请求会被链上每个处理者处理,直到请求被处理完毕。该模式主要解决的是请求的发送者和多个请求处理者之间建立一条链式的调用关系,以实现请求的逐层解析处理。

黄团团的个人博客 1552

从养殖场到科技前沿:YOLOv11+OpenCV精准计数鸡蛋与鸡

YOLOv11结合OpenCV技术,精准识别和计数鸡蛋与鸡,广泛应用于养殖场、市场监控和自动化包装。通过深度学习与计算机视觉,提升农业生产效率,让智能化管理更简单高效。

专注于深入研究多种编程语言,以实战为导向,逐步拓展开发技能,提升工程化编码和思维能力,展现无敌技术实力。 1206

5个行为型模式组合实战:解决PHP代码复杂度难题

你是否还在为PHP项目中日益复杂的业务逻辑感到头疼?当单一设计模式无法应对多变需求时,**模式组合**将成为你的秘密武器。本文基于[DesignPatternsPHP](https://link.gitcode.com/i/e6a91c09008a17d842c0079062422a33)项目,通过5个真实场景案例,带你掌握行为型模式的高级组合技巧,让代码从"混乱堆砌"变为"灵活乐高"。 读完本...

gitblog_00613的博客 1016

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

软件设计模式:创建型,结构型,行为型模式

1.创建型 工厂方法 抽象工厂 建造者 单例 原型 结构型 适配器 代理 装饰器 外观 桥接 组合 享元 1.创建型 1.1 工厂方法 每一种产品提供一个工厂类(1对1) 1.2抽象工厂 多产品,多工厂(1对多),比如说,每个汽车公司可能要同时生产轿车,货车,客车,那么每一个工厂都要有创建轿车,货车和客车的方法。 区别 简单工厂 : 用来生产同一等级...

weixin_45617356的博客 4067

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

java设计模式之责任链模式

java设计模式之责任链模式 在现实生活中,一个事件需要经过多个对象处理是很常见的场景。例如,采购审批流程、请假流程等。公司员工请假,可批假的领导有部门负责人、副总经理、总经理等,但每个领导能批准的天数不同,员工必须根据需要请假的天数去找不同的领导签名,也就是说员工必须记住每个领导的姓名、电话和地址等信息,这无疑增加了难度。 在计算机软硬件中也有相关例子,如总线网中数据报传送,每台计算机根据目标地址是否同自己的地址相同来决定是否接收;还有异常处理中,处理程序根据异常的类型决定自己是否处理该异常;还有 Str

qq_44772660的博客 949

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

手撸设计模式之-责任链模式

手撸设计模式之-责任链模式一 、责任链模式介绍1.1 定义1.2 责任链模式UML结构图1.3 责任链模式结构详细1.3 用例代码实现二、责任链模式应用场景:2.1 场景概述2.2 场景模式图2.3 场景代码实现2.4 优缺点三、总结 一 、责任链模式介绍 1.1 定义 责任链模式(Chain of Responsibility Pattern)为请求创建了一个接收者对象的链。这种模式给予请求的类型,对请求的发送者和接收者进行解耦。这种类型的设计模式属于行为型模式。 在这种模式中,通常每个接收者都包含对

以梦为马,不负韶华 515

责任链模式

责任链模式(Chain of Responsibility Pattern) 通过将请求沿着一系列处理者传递,直到有一个处理者处理它,从而降低了请求发送者与接收者之间的耦合度,增强了系统的灵活性和可扩展性。该模式适用于需要多个对象能够处理同一个请求的场景,特别是在处理者的选择需要动态确定时。

TinaYuNuo的博客 1313

设计模式—— 十六 :责任链模式

请求的链式处理——职责链模式

三分恶的博客 1684

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

1. 意图 使多个对象都有机会处理请求. 从而避免请求的发送者/接收者之间的耦合关系.这些对象将连成一条链.并沿着链传递该请求. 直到有个对象处理它. 2. 动机 3. 适用性 有多个对象可以处理一个请求.具体是哪个对象处理请求要在运行时确定.需要在不明确指定接收者的情况下.向多个对象中的一个提交一个请求.可处理一个请求的对象的集合需要被动态指定. 4. 结构

晴天的专栏 1068

责任链模式及其使用场景

责任链模式及其使用场景1.责任链模式定义2. 责任链模式使用场景3. 责任链模式实现3.1 简单实现3.2 扩展实现4. 责任链模式实战5. 总结 1.责任链模式定义 责任链模式(Iterator Pattern), 是行为型设计模式之一。这种模型结构有点类似现实生活中铁链,由一个个铁环首尾相接构成一条链,如果这种结构用在编程领域,则每个节点可以看做一个对象,每个对象有不同的处理逻辑,将一个请求从...

虎哥LoveDroid 2万+

行为型模式(四):责任链模式

一、 什么是责任链模式 责任链, 顾名思义是将多个节点通过链条的方式连接起来,每一个节点相当于一个对象,而每一个对象层层相关,直接或者间接引用下一个对象(节点);直到链条中有一个节点处理头节点传下来的事件截止。 二、责任链模式使用场景(以下摘自 Android源码设计模式) 有一事件,可以被多个对象同时处理,但是由哪个对象处理则在运行时动态决定! 在请求处理者不明确时向多个对象中提交一个请求。 动态指定一组对象处理请求 三、责任链模式UML图 责任链模式.png 客户端发出请求,调用抽象类Hand

bugyinyin的博客 402

设计模式(二十四)——责任链模式(Chain of Responsibility Pattern)

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

Duktig的博客 392

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

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

liang8999的博客 3644

设计模式第6讲——责任链模式(Chain)

责任链模式属于行为型模式。一、什么是责任链模式 二、组成 三、优缺点 四、应用场景4.1 应用实例4.2 程序场景 五、代码实现5.0 UML类图5.1 Approver(审批者)5.2 Master(校长)5.3 GradeLeader(年级组长)5.4 ClassAdviser(班主任)5.5 LeaveRequest(请假信息)5.6TestChain5.7 总结

让~学习~成为一种习惯(橡 皮 人の技术博客) 4310

责任链模式(Chain Responsibility)

3、责任链的顶端和低端节点之间不应该存在耦合问题。2、链条太长可能会导致的性能问题。2、抽象处理类(也可以是接口)四、责任链模式需要注意的地方。1、需要传递处理的数据类。

weixin_41992498的博客 492
上一篇: 用代码和UML图化解设计模式之《观察者模式》
下一篇: 角色扮演类大型网络游戏C++后台和纯C语言后台的差异
ctreewang
博客等级 码龄16年 1608粉丝 276原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值