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

介绍

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);}@Overridepublic 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.mzph.cn/news/1471.shtml

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

相关文章

【C++】C++11 (3): lambda表达式和包装器

一、lambda表达式 C98中的一个例子 在C98中&#xff0c;如果想要对一个数据集合中的元素进行排序&#xff0c;可以使用std::sort方法。 #include <algorithm> #include <functional> int main() {int a[] { 4,1,8,5,3,7,0,9,2,6 };// 默认按照小于比较&#xff…

JS、Vue鼠标拖拽

JS代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdevic…

每日打卡day8——差分练习

输入一个长度为 n 的整数序列。 接下来输入 m 个操作&#xff0c;每个操作包含三个整数 l,r,c&#xff0c;表示将序列中 [l,r] 之间的每个数加上 c。 请你输出进行完所有操作后的序列。 输入格式 第一行包含两个整数 n 和 m。 第二行包含 n 个整数&#xff0c;表示整数序列…

Go和Java实现观察者模式

Go和Java实现观察者模式 在监控系统中&#xff0c;我们需要采集监控指标的信息&#xff0c;假设当采集的指标信息超过阈值时我们需要对该监控指标持久化到 数据库中并且进行告警。 本文通过指标采集持久化和告警来说明观察者模式的使用&#xff0c;使用Go语言和Java语言实现…

使用Linux Deploy搭建服务器(五)Linux Deploy添加自启动(亲测可用)linuxdeploy自动化配置

添加开机自动任务,可以省去开机后手动输入初始化命令的操作 一、方式1 run-parts方式,也就是rc.local的方式(这种方式有时候不生效,按照4中的配置就好了) 1、Linux Deploy配置 1.点击右下角的设置图标进入设置界面 2.划到“初始化”那块,“启用”打上勾 选项“run-p…

文件包含漏洞

一、什么是文件包含漏洞 1.文件包含漏洞概述 和SQL注入等攻击方式一样&#xff0c;文件包含漏洞也是一种注入型漏洞&#xff0c;其本质就是输入一段用户能够控制的脚本或者代码&#xff0c;并让服务端执行。 什么叫包含呢&#xff1f;以PHP为例&#xff0c;我们常常把可重复使…

基于GIS的生态敏感性评价与产业路径选择研究:以江西省吉安市为例

导读: 确立绿水青山就是金山银山的理念,建立生态经济体系,是新时代生态环境保护与经济发展的协调之道。对产业规划而言,与生态同行,构建绿色产业体系,是推动地区高质量发展的根本要求。鉴于此,文章从实证角度出发,以江西省吉安市为研究对象,采用生态敏感性评价方法,选…

【Python基础】- break和continue语句

在Python中&#xff0c;break和continue是用于控制循环语句的特殊关键字。 break语句用于跳出当前的循环&#xff08;for循环或while循环&#xff09;&#xff0c;并继续执行紧接着的循环外的代码。它通常用于满足某个条件时提前结束循环。例如&#xff0c;考虑以下示例&#…

RabbitMQ 同样的操作一次成功一次失败

RabbitMQ 是一个功能强大的消息队列系统&#xff0c;广泛应用于分布式系统中。然而&#xff0c;我遇到这样的情况&#xff1a;执行同样的操作&#xff0c;一次成功&#xff0c;一次失败。在本篇博文中&#xff0c;我将探讨这个问题的原因&#xff0c;并提供解决方法。 我是在表…

深入理解阻塞与非阻塞、同步与异步

0、前言 阻塞与非阻塞、同步与异步&#xff0c;这几个概念虽然每次看都能看的懂&#xff0c;但是过一段时间又会忘掉&#xff0c;所以系统的整理一下他们的区别&#xff0c;也方便自己后面忘掉的时候快速记忆&#xff0c;虽然网上有很多的说明这些概念的帖子&#xff0c;但是每…

Django dumpdata 迁移数据库数据

Django 迁移数据库数据 数据导出 连接上数据源数据库&#xff0c;执行 dumpdata 导出数据。 python3 manage.py dumpdata main --indent 4 -o mydata.json数据导入 连接上目标数据库&#xff0c;比如通过在 local_settings.py 配置本地数据库&#xff0c;执行 loaddata 导入…

西安丨高时空分辨率、高精度一体化预测技术之风、光、水能源自动化预测技术应用

目录 ​第一章 预测平台讲解及安装 第二章 一体化预测工具详解与数据获取及制备 第三章 风资源预测自动化技术 第四章 太阳能资源自动化预测技术 第五章 水资源自动化预测技术 第六章 后处理自动化技术 更多推荐 能源是国民经济发展和人民生活必须的重要物质基础。在过去…

Linux5.17 Ceph应用

文章目录 计算机系统5G云计算第四章 LINUX Ceph应用一、创建 CephFS 文件系统 MDS 接口1.服务端操作2.客户端操作 二、创建 Ceph 块存储系统 RBD 接口三、创建 Ceph 对象存储系统 RGW 接口四、OSD 故障模拟与恢复 计算机系统 5G云计算 第四章 LINUX Ceph应用 一、创建 CephF…

微服务: 04-springboot中rabbitmq配置,消息回收,序列化方式

目录 1. 本文简介: 1.1 java序列化的缺点 ---> 1.1.1 无法跨语言 --->1.1.2 易被攻击 ---> 1.1.3 序列化后的流太大 ---> 1.1.4 序列化性能太差 2. 配置总览 2.1 基础配置 2.2 连接重试配置 2.3 异常重试机制 2.4 确认模式(本篇是自动) ---> 2.4.1…

linux文件系统只读导致监听异常

项目经理发来截图&#xff0c;监听无法启动了&#xff0c;截图如下 orcl:/home/oraclehydb> lsnrctl start LSNRCTL for Linux: Version 11.2.0.4.0 - Production on 18-JUL-2023 11:29:54 Copyright (c) 1991, 2013, Oracle. All rights reserved. Starting /u01/app/…

QML 入门

QML 入门 Qt 基本模块Qt Quick 开发所需基本技术QML 基本语法QML 数据类型基本数据类型&#xff08;39&#xff09;boolcolor 颜色类型coordinate 坐标类型date 日期时间类型doubleenumeration 枚举类型font 字体类型geocircle 几何圆数据类型geopath 几何路径数据类型geopolyg…

NER实战:(命名实体识别/文本标注/Doccano工具使用/关键信息抽取/Token分类/源码解读)

命名实体识别&#xff08;Named Entity Recognition&#xff0c;NER&#xff09;是自然语言处理领域的一项关键任务&#xff0c;旨在从文本中识别和分类特定的命名实体&#xff0c;如人名、地名、组织机构名等。NER的目标是标记文本中的实体&#xff0c;并将其归类到预定义的实…

从浏览器输入url到页面加载(六)前端必须了解的路由器和光纤小知识

前言 上一章我们说到了数据包在网线中的故事&#xff0c;说到了双绞线&#xff0c;还说到了麻花。这一章继续沿着这条线路往下走&#xff0c;说一些和cdn以及路由器相关&#xff0c;运营商以及光纤相关的小知识&#xff0c;前端同学应该了解一下的 目录 前言 1. CDN和路由器…

自定义类型详解(C语言)

自定义类型 一. 结构体1.1 什么是结构体1.2 结构体的声明1.3 特殊的声明1.4 结构体的自引用1.5 结构体变量的定义和初始化1.5.1 结构体变量的定义1.5.2 结构体变量的初始化 1.6 结构体内存对齐1.6.1 为什么存在内存对齐 1.7 修改默认对齐数1.8 结构体传参 二. 位段2.1 什么是位…

OCR学术前沿及产业应用高峰论坛202204

OCR学术前沿及产业应用高峰论坛 相关议程&#xff1a;https://mp.weixin.qq.com/s/LYoKHFad9D-gjhGlVF3Czg 广告OCR技术研究与应用-腾讯 视频制作ASR&#xff0c;ocr得到字幕 计算机动画CG OCR实践与技术创新 - 蚂蚁 loss优化 数据合成 对比学习的方式&#xff0c;什么样是…