Chain of Responsibility 责任链模式

责任链模式(Chain of Responsibility Pattern)—— 嵌套拦截器 一、what is 责任链模式? 我前面的文章介绍过动态代理模式,该模式设计者只需要向开发者暴露拦截器即可。当有多个拦截器时,就衍生出了责任链。 什么是责任链?比如请假流程:请假单看成对象,你要请假需要经过开发经理、部门经理、人事部门负责人等多个环节,每个环节的人都可以拦截你的请假申请单进行修改或审批,这里把每个环节都看成拦截器的话,总共有三个拦截器。 一个对象在一条链上被多个拦截器处... 阅读详情

模式定义
责任链模式是一种对象的行为模式。在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链。请求在这个链上传递,直到链上的某一个对象决定处理此请求。发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求,这使得系统可以在不影响客户端的情况下动态地重新组织链和分配责任。责任链模式要求某个处理对象要么直接处理,要么转到下一个链处理,不允许处理一半再移交一半。 Windows操作系统的消息处理机制十分类似这种模式。 

 

使用方法
一个责任链上多个处理类各自包含了下一个处理类的对象,当当前的处理对象无法处理时,必须马上移交给下一个链上的处理对象。

 

使用范围

  • 多个处理类可以处理一个请求。
  • 客户类无须知道请求究竟被谁处理了。

 

举例说明
假设有个Logger用来记录应用程序的日志,记录普通的INFORMATION时,只在标准输出界面上显示该INFORMATION;当记录DEBUG的信息时候,将信息记录到文件;当记录ERROR信息的时候,则把信息发送到email。

abstract class Logger{
    public static int ERROR = 0;
    public static int DEBUG = 1;
    public static int INFORMATION = 2;

    protected int mask;

    // The next element in the chain of responsibility
    protected Logger next;
    public Logger setNext( Logger log)
    {
        next = log;
        return log;
    }

    abstract protected void writeMessage( int priority, String msg );

}

 

setNext()方法用来保存当前Logger链上的下一个处理对象。

以下是不同的处理类各自实现自己的处理方法,当发现无法处理请求时,马上交给链上的处理类:next.writeMessage(..)。

public class StandoutLogger extends Logger{

	protected void writeMessage(int priority, String msg) {
		if (priority == Logger.INFORMATION){
			System.out.println("Standout:" + msg);
		}else if (next!=null){ 
			next.writeMessage(priority, msg);
		}
	}
}
----------
public class FileLogger extends Logger{

	protected void writeMessage(int priority, String msg) {
		if (priority == Logger.DEBUG){
			System.out.println("File:" + msg);
		}else if (next!=null){
			next.writeMessage(priority, msg);
		}

	}
};
---------
public class EmailLogger extends Logger{

	protected void writeMessage(int priority, String msg) {
		if (priority == Logger.ERROR){
			System.out.println("Email:" + msg);
		}else if (next!=null){
			next.writeMessage(priority, msg);
		}
	}
}

 

再观察客户类,它无需知道究竟谁处理了该请求,它只关心有没有被处理。

public class Client {
	public static void main(String args[]){
		StandoutLogger log = new StandoutLogger();
		FileLogger flog = new FileLogger();
		EmailLogger elog = new EmailLogger();

		log.setNext(flog);
		flog.setNext(elog);

		log.writeMessage(Logger.DEBUG, "debug information");
	}
}

 

 

 

下载示例

责任链模式(Chain of Responsibility Pattern) 责任链模式是一种行为型设计模式,它将请求的发送者和接收者解耦,使多个对象都有机会处理这个请求。将这些对象连成一条链,并沿着这条链传递请求,直到有一个对象处理它为止。责任链模式是一种灵活且强大的设计模式,尤其适用于处理流程化的请求处理场景。它通过将请求的发送者和接收者解耦,提高了系统的灵活性和可扩展性。抽象出请求处理者的统一接口或抽象类每个处理者只关注自己能处理的请求类型构建一条处理链,让请求在链上传递客户端只需要访问链的头部节点合理设计链的长度,避免链过长导致性能问题。 阅读详情

相关推荐

DICOM三维重建:基于VTK实现三种面绘制算法

版本:VS2019、VTK9.0.1 #define vtkRenderingCore_AUTOINIT 3(vtkInteractionStyle,vtkRenderingFreeType,vtkRenderingOpenGL2) #define vtkRenderingVolume_AUTOINIT 1(vtkRenderingVolumeOpenGL2) #include "vtkDICOMImageReader.h" #include "vtkRenderWindowInteractor.h" #i

一直在笑的博客 5924

Chain of Responsibility Pattern

Chain of Responsibility Pattern

小胖的专栏 357

STM32解码EM4100的曼彻斯特编码(库函数版本)

前言: 前些日子老师布置一个任务叫我们焊接一个RFID读卡器,其中刚好我们手上也有一个STM32F103RBT6开发板,老师于是布置任务叫我们用STM32完成对EM4100进行读卡操作 EM4100简介: 中 文 名:EM4100卡 存储容量:64bit 工作频率:125KHZ 读写距离:2-15cm 产品名称:EM4100/EM4102卡 芯片类型:μEM瑞士微电 EM4100/EM4102 擦写寿命:读不限,只读 外形尺寸:ISO标准卡/厚卡 封装材料:PVC、ABS 典型应用:身份识别、考勤系统、门禁

Gancenty 8602

设计模式中的责任链模式(Chain of Responsibility Pattern)

在软件开发中,经常会遇到需要按照顺序处理请求的情况,例如日志处理、权限控制、审批流程等。如果使用硬编码的 `if-else` 结构,代码将变得复杂且难以扩展。 **责任链模式(Chain of Responsibility Pattern)** 提供了一种**将请求的处理者组织成链式结构**的方法,使请求可以**沿着责任链传递,直到被某个处理者处理**,从而提高代码的灵活性和可扩展性。本文将详细介绍责任链模式的概念、应用场景,并通过 Python 代码示例展示其实现方式。

2493

在树莓派5(8G版)上运行Ollama + LLM

直接上结论,Ollama在树莓派上能安装,且本身运行起来毫无压力,但具体到大语言模型,Deepseek似乎不总是最佳选择。

ki1381的专栏 1652

【Cubietruck】Qt5.8.0 x64、x86、armhf三个版本的编译安装

一、       Preparation 以下环境配置支持虚拟机和实体机,但是实体机生产效率会相对高一点,实体机编译Qt的速度是虚拟机两倍以上。 若使用虚拟机,推荐使用VirtualBox,开源免费,尽量不要使用Vmware破解版。   Download List   名称 链接 下载项目 OS https://mirro

beatfan的博客 3658

设计模式-责任链模式-Chain of Responsibility Pattern

创建一个抽象基类,定义处理请求的接口和设置下一个处理者的指针。

wesigj的博客 2387

openEuler服务器离线安装实战:从Docker到Samba的完整避坑指南

本文提供了一份详尽的openEuler服务器离线部署实战指南,重点解决了在无网络环境下安装Docker、Samba等软件的依赖难题。文章深入对比了`dnf install`、`rpm`直接安装及禁用仓库安装三种核心方法,并分享了构建本地DNF仓库的进阶策略,旨在帮助运维人员构建高效可靠的离线部署工作流。

weixin_29210759的博客 72

责任链模式 Chain of Responsibility Pattern

一、模式介绍 1.1、定义 将请求的发送和接收解耦,让多个接收对象都有机会处理这个请求。将这些接收对象串成一条链,沿着这条链传递这个请求,直到链上的某个对象能够处理它为止。责任链模式也叫职责模式。 在责任链模式中,客户只需要将请求发送到责任链上即可,不需要关心请求的处理细节和请求的传递过程,请求会自动进行传递。所以责任链将请求的发送者和请求的矗立着解耦了。 1.2、优点 降低了对象之间的耦合度。该模式使得一个对象无须知道到底是哪一个对象处理其请求以及链的结构,发送者和接收者也无须拥有对方的明确信息 增强了

木易 192

QT Android开发之Android端usb调试模式设置与问题解决

QT Android开发之Android端usb调试模式设置与问题解决 一.QT android开发android端usb调试模式设置 QT android开发环境搭建完成后,android设备需要打开usb调试模式才能正常连接,下面以小米ipad为例进行设置(其他手机和ipad设置方法类似) 二.小米ipad打开usb调试模式 1.设置----我的设备-----全部参数信息-----OS版本---点击这里6次以上就进入开发者模式。

热土程序园,利他愉己~ 1133

Newton & Nvidia 开源 GPU 加速机器人仿真器入门教程(一)

Newton 是一个 GPU 加速、可扩展和可微分的物理仿真引擎,专为机器人、研究和高级仿真工作流而设计。Newton 基于 NVIDIA Warp 并集成了 MuJoCo Warp,为用户和开发人员提供了高性能仿真、现代 Python API 和灵活的架构。

机器人控制与仿真应用 1483

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

责任链模式(Chain of Responsibility Pattern)是一种行为设计模式,它允许你创建一个对象链。请求将沿着这个链传递,直到有一个对象处理它为止。这种模式可以使请求的发送者和接收者解耦。 当想让一个以上的对象有机会能够处理同一请求的时候,就可以使用责任链模式(Chanin of Responsibility Pattem)

weixin_44435110的博客 2161

【SpringBoot 3.x 第92节】Spring Modulith:构建模块化单体架构(基于 Spring Boot 3),一文带你搞透(超详细)!

🏆本文收录于《滚雪球学SpringBoot 3.x》,专门攻坚指数提升,本年度国内最系统+最专业+最详细(永久更新)。    该专栏致力打造最硬核 SpringBoot3 从零基础到进阶系列学习内容,🚀均为全网独家首发,打造精品专栏,专栏持续更新中…欢迎大家订阅持续学习。 如果想快速定位学习,可以看这篇【SpringBoot3教程导航帖】,你想学习的都被收集在内,快速投入学习!!两不误。

**My Coding Family** 1002

责任链模式 (Chain of Responsibility Pattern)

行为型设计模式

qq_35861084的博客 905

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

责任链模式(Chain of Responsibility Pattern)

顾名思义,责任链模式(Chain of Responsibility Pattern)为请求创建了一个接收者对象的链。这种模式给予请求的类型,对请求的发送者和接收者进行解耦。这种类型的设计模式属于行为型模式。 在这种模式中,通常每个接收者都包含对另一个接收者的引用。如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接收者,依此类推。 应用实例: 红楼梦中的"击鼓传花"。 JS 中的事件冒...

qq_21344887的博客 449

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

责任链模式(Chain of Responsibility Pattern)简介

定义 责任链模式(Chain of Responsibility Pattern)是将链中每一个节点看作是一个对象,每个节点处理的请求均不同,且内部自动维护一个下一节点对象。当一个请求从链式的首端发出时,会沿着链的路径依次传递给每一个节点对象,直至有对象处理这个请求为止。属于行为型模式。 应用场景 责任链模式主要是解耦了请求与处理,客户只需将请求发送到链上即可,无需关心请求的具体内容和处理细节,请求会自动进行传递直至有节点对象进行处理。适用于以下应用场景: 1、多个对象可以处理同一请求,但具体由哪个对象处理

weixin_43183107的博客 598

IEM模型,地表粗糙度模拟

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

Spring框架之责任链模式 (Chain of Responsibility Pattern)

责任链模式(Chain of Responsibility Pattern)是一种行为型设计模式,旨在将请求的发送者和处理者解耦。它通过创建一条 处理请求的责任链,使得多个对象都有机会处理请求,从而避免了请求的发送者和处理者之间的紧耦合。责任链模式的核心思想是将请求沿着链传递,直到有一个对象处理它为止。

欢迎来到我的博客!这里是一个专注于计算机技术的分享平台,涵盖编程开发、算法研究、系统架构、软件工程等多个领域。无论你是初学者还是资深开发者,都能在这里找到有价值的内容。 1613

Mybatis框架之责任链模式 (Chain of Responsibility Pattern)

在 MyBatis 框架中,责任链模式 (Chain of Responsibility Pattern) 被广泛应用于多个功能模块中,例如 插件拦截器、SQL 执行流程中的拦截器链、动态 SQL 的解析与处理等。这种设计模式为 MyBatis 提供了高度的扩展性和灵活性,使其能够轻松应对各种自定义功能需求。

欢迎来到我的博客!这里是一个专注于计算机技术的分享平台,涵盖编程开发、算法研究、系统架构、软件工程等多个领域。无论你是初学者还是资深开发者,都能在这里找到有价值的内容。 1322

责任链模式【Chain of Responsibility Pattern】

中国古代对妇女制定了“三从四德”的道德规范,“三从”是指“未嫁从父、既嫁从夫、夫死从子”,也就是说一个女性,在没有结婚的时候要听从于父亲,结了婚后听从于丈夫,丈夫死了还要听儿子的,举个例子来说,一个女的要出去逛街,同样这样的一个请求,在她没有出嫁前她必须征得父亲的同意,出嫁之后必须获得丈夫的许可,那丈夫死了怎么办?一般都是男的比女的死的早,还要问问儿子是否允许自己出去逛街,估计你下边马上要问要是没

admin1973的专栏 687

Java: Chain of Responsibility Pattern

文章摘要:本文展示了一个基于责任链模式的珠宝业务处理系统Java实现。系统通过12个处理器(如原料采购、设计绘图、生产加工等)构建完整业务流程链,每个处理器继承BaseBusinessHandler基类并实现核心业务逻辑。采用异步处理机制(CompletableFuture),支持流程中断和日志记录。包含配置管理(AppSettings)、后台服务(日志清理)和测试用例,演示了正常流程与原料缺失的异常流程处理。系统模拟珠宝从采购到销售的全生命周期管理,体现了责任链模式在复杂业务流程中的灵活应用。

Geovin Du Dream Park 454

20.责任链模式(Chain of Responsibility Pattern)

责任链模式(Chain of Responsibility Pattern) 是一种行为型设计模式,它使得多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将多个处理对象连成一条链,并沿着这条链传递请求,直到有一个对象处理它为止。每个对象在处理请求时,可以决定将请求传递给链中的下一个对象。// 处理者接口protected:// 下一个处理者public:// 设置下一个处理者// 处理请求。

Tiantangbujimo7的博客 1204

行为型模式——责任链模式(Chain of Responsibility Pattern)

该模式避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止。 通过UML图理解,使用,再深入分析Log如何使用该模式。

qq_46658171的博客 1166
上一篇: Template Method 模板模式
下一篇: Command 命令模式
zigzagsoft
博客等级 码龄19年 34粉丝 50原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值