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

news2024/11/25 21:22:41

介绍

Java责任链(Chain of Responsibility)设计模式是指很多处理对象构成一个链,链中前一个对象指向后一个对象。请求在链中传递,一个请求可以被一个或者多个对象处理。调用方(即客户端)不知道请求会被链中的哪个对象处理,所以责任链模式可以方便组织责任链而不影响调用方。
责任链模式一般定义抽象类或者接口来规范行为,而定义具体类实现具体的处理逻辑。

示例

示例1:Netty中的handler就构成了责任链模式

注:下面图拷贝自Netty的ChannelPipeline API中的图
在这里插入图片描述

示例2:一个简单的责任链模式代码示例

package com.thb;

// 定义一个抽象类,规范行为
public abstract class AbstractHandler {
	
	private AbstractHandler nextHandler;  // 指向下一个处理器
	private char startWith;
	
	public AbstractHandler(char startWith) {
		this.startWith = startWith;
	}
	
	// 处理逻辑的抽象方法
	public abstract void handleMessage(String msg);	
	
	// 设置下一个处理器
	public void setNextHandler(AbstractHandler nextHandler) {
		this.nextHandler = nextHandler;
	}
	
	// 取出下一个处理器
	public AbstractHandler getNextHandler() {
		return this.nextHandler;
	}	
}


// 定义具体类,实现真正的处理逻辑
package com.thb;

public class Handler extends AbstractHandler {
	
	public Handler(char startWith) {
		super(startWith);
	}
	
	@Override
	public void handleMessage(String msg) {
		// 具体处理逻辑
		if (msg.startsWith("H")) {
			System.out.println("process the message");
		} else {
			if (getNextHandler() != null) {
				getNextHandler().handleMessage(msg);
			} else {
				System.out.println("no suitable hander");
			}
		}		
		
	}

}


// 定义一个客户端来模拟调用
package com.thb;

public class Test2 {
	
	public static void main(String[] args) {
		AbstractHandler handler1 = new Handler('a');
		AbstractHandler handler2 = new Handler('H');
		AbstractHandler handler3 = new Handler('c');
		handler1.setNextHandler(handler2);
		handler2.setNextHandler(handler3);
		
		String msg = "Hello"; 
		handler1.handleMessage(msg);
		
		msg = "world";
		handler1.handleMessage(msg);
	}

}

输出结果:
在这里插入图片描述

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

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

相关文章

【UniApp开发小程序】项目创建+整合UI组件(FirstUI和uView)

创建项目 下图为初始化的项目的文件结构 引入组件 俗话说:“工欲善其事,必先利其器”,为了更加方便地开发出页面较为美观的小程序,我们先引入成熟的UI组件,再开始开发之旅。(如果你是前端高手&#xff0…

ardupilot IMU陀螺仪方向的重要性

目录 文章目录 目录摘要1.简介---BMI088 方向2.控制摘要 本节主要记录IMU陀螺仪方向的重要性,欢迎批评指正!!! 1.简介—BMI088 方向 注意这个BMI088 的IMU方向,特别是是那个左上角的黑色点点,他的坐标系满足右手坐标系,但是我们无人机坐标系是北东地坐标系,因此需要把…

Cobalt Strike实战实例

客户端 初始化界面如下: 可以多个客户端同时连接,可以聊天。 msg 指定id 文字。 msg 文字。 创建监听器 这里出现了,监听设置不成功。原因是服务端的CS4.0报错了。我重新下载就可以了。如果这里有问题,可联系我。我帮你。这里解…

python+requests接口自动化测试

原来的web页面功能测试转变成接口测试,之前大多都是手工进行,利用postman和jmeter进行的接口测试,后来,组内有人讲原先web自动化的测试框架移驾成接口的自动化框架,使用的是java语言,但对于一个学java&…

Feign远程调用组件

Feign Feign是Netfix开发的一个轻量级REstFul的HTTP服务客户端,是以java接口注解的方式调用HTTP请求,而不用像java中通过封装HTTP请求报文的方式直接调用,可以帮助我们更加便捷,优雅的调用HTTP API Feign RestTemplate Ribbon Hystrix 本质:封装了HTTP调用流…

JAVA (static) 简述

前言: 在力扣上提交代码,发现用static定义变量,和不用static修饰变量,虽然每次运行的结果都一样,但是提交的结果却有通过与不通过两种情况。 测试题目:组合(力扣)dfs 回溯 剪枝 JA…

Redis数据结构 — List

目录 链表结构设计 ​编辑链表节点结构设计 链表的优势与缺陷 Redis 的 List 对象的底层实现之一就是链表。C 语言本身没有链表这个数据结构的,所以 Redis 自己设计了一个链表数据结构。 链表结构设计 typedef struct list {//链表头节点listNode *head;//链表尾…

【Matlab】智能优化算法_流向算法FDA

【Matlab】智能优化算法_流向算法FDA 1.背景介绍2.数学模型3.文件结构4.算法流程图5.详细代码及注释5.1 FDA.m5.2 initialization.m5.3 main.m5.4 Select_Functions.m 6.运行结果7.参考文献 1.背景介绍 在流域中,过量或有效降雨量是指流过地表且未渗入土壤的降雨量。…

使用可视化数据库工具 DBeaver

新建一个名为 test 的数据库:右击数据库点击新增,然后创建一张 test ,utf8mb4 字符的,点击确定 在 test 数据库下新建一张数据表,如下所示:右击表,然后点击新建表 鼠标放列上面,右键…

安全狗重磅发布数据资产梳理系统

今年6月,浙江某科技有限公司因违反《中华人民共和国数据安全法》第四十五条及相关规定,公司及项目主管人员、直接责任人员分别罚款100万元、8万元、6万元。这也是《数据安全法》开始运行以来的首例“高额罚单”案件。实际上,这也给我国众多行…

002 Jetpack Compose基础组件学习

1.Text组件 Text组件就是原先的TextView组件,用法还是挺简单的,如下就是简单的Text用法: package com.test.composeimport android.os.Bundle import androidx.activity.ComponentActivity import androidx.activity.compose.setContent im…

(搜狗输入法)自定义输入日期格式

需求 想要按特定格式快速输入当天的日期戳:XXXX-XX-XX,如 2023-07-13 方法 参考链接:搜狗输入时间日期格式输入及自定义 按上述教程操作,自定义短语表达式:#$year-$month_mm-$day_dd 即可实现用搜狗输入法输入“r…

Table Recognition Metric: 表格识别算法评测工具包及相关评测基准数据集

Table Recognition Metric 该库用于计算TEDS指标,用来评测表格识别算法效果。可与魔搭-表格识别测试集配套使用。TEDS计算代码参考:PaddleOCR 和 DAVAR-Lab-OCR 使用说明: Install package by pypi.pip install table_recognition_metricRu…

2023-7-13-第十八式观察者模式

🍿*★,*:.☆( ̄▽ ̄)/$:*.★* 🍿 💥💥💥欢迎来到🤞汤姆🤞的csdn博文💥💥💥 💟💟喜欢的朋友可以关注一下&#xf…

【python手写算法】【多元】利用梯度下降实现线性拟合

本来是想做一个特征缩放的,然鹅发现我那种归一化缩放反而让训练速度变慢了。。先搞一个二元的。 if __name__ __main__:X1 [12.46, 0.25, 5.22, 11.3, 6.81, 4.59, 0.66, 14.53, 15.49, 14.43,2.19, 1.35, 10.02, 12.93, 5.93, 2.92, 12.81, 4.88, 13.11, 5.8,29.…

135432-37-0,Cyclo(-Gly-Arg-Gly-Asp-Ser-Pro)多肽合成(化学)方法

资料编辑|陕西新研博美生物科技有限公司小编MISSwu​ ---试剂基团反应特点(Reagent group reaction characteristics)--- 多肽试剂Cyclo(-Gly-Arg-Gly-Asp-Ser-Pro)(CAS号:135432-37-0),目前多肽合成中&a…

左神算法中级提升(4) 超级重点:动态规划的空间压缩技巧

【案例1】 【题目描述】【以后出现这种的题型 概率很低】 【案例2】 【题目描述】 【思路解析】 构建两个栈,一个栈存放基本数据,一个栈存放最小值数据。每次加入一个数据时,当前元素和栈顶元素比较,谁小谁进入。 然后弹出时&a…

Hugging News #0710: 体验 MusicGen、Diffusers 库发布一周年、我们的内容政策更新

每一周,我们的同事都会向社区的成员们发布一些关于 Hugging Face 相关的更新,包括我们的产品和平台更新、社区活动、学习资源和内容更新、开源库和模型更新等,我们将其称之为「Hugging News」。本期 Hugging News 有哪些有趣的消息&#xff0…

[PyTorch][chapter 44][时间序列表示方法4]

前言: 训练复杂度 OE*T*Q 参数 全称 E 迭代次数 Number of the training epochs T数据集大小 Number of the words in the training set Q 模型计算复杂度 Model computational complexity E,T 一般都认为相同,所以这里面主要讨论Q,模…

maven-依赖管理-下

依赖冲突 特殊优先 特殊优先∶当同级配置了相同资源的不同版本&#xff0c;后配置的覆盖先配置的(提醒&#xff1a;要尽量避免这种没有意义的冲突)修改D:\java_projects\maven_A\pom.xml, 引入mysql5.1 <?xml version"1.0" encoding"UTF-8"?> &…