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.hqwc.cn/news/21070.html

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

相关文章

Node连接Mongodb数据库

1.初始化 npm init 2.安装mongoose npm i mongoose 3.导入mongoose const mongooserequire("mongoose") 4.连接mongodb服务 mongoose.connect("mongodb://127.0.0.1:27017/user") 说明:mongodb是协议,user是数据库,如果没有会自动创…

【计算机视觉 | 目标检测】arxiv 计算机视觉关于目标检测的学术速递(7 月 13 日论文合集)

文章目录 一、检测相关(8篇)1.1 Exposing the Fake: Effective Diffusion-Generated Images Detection1.2 Large Class Separation is not what you need for Relational Reasoning-based OOD Detection1.3 Visualization for Multivariate Gaussian Anomaly Detection in Imag…

matlab学习指南(1):matlab初步入门详细介绍

🌅*🔹** φ(゜▽゜*)♪ **🔹*🌅 欢迎来到馒头侠的博客,该类目主要讲数学建模的知识,大家一起学习,联系最后的横幅! 喜欢的朋友可以关注下,私信下次更新不迷路&#xff0…

开源预训练框架 MMPRETRAIN官方文档(概览、环境安装与验证、基础用户指南)

MMPretrain是全新升级的开源预训练框架。它已着手提供多个强大的预训练骨干网并支持不同的预训练策略。MMPretrain 源自著名的开源项目 MMClassification 和MMSelfSup,并开发了许多令人兴奋的新功能。目前,预训练阶段对于视觉识别至关重要。凭借丰富而强…

IO线程NO

在处理问题: Got fatal error 1236 from master when reading data from binary log: Could not find first log file name in binary log index file 好翻译过来就是: 从二进制日志读取数据时,从主服务器收到致命错误 1236:“无法…

云原生日志Agent/Aggregator

Loggie是一个基于Golang的轻量级、高性能、云原生日志采集Agent和中转处理Aggregator,支持多Pipeline和组件热插拔,提供了: ● 一栈式日志解决方案: 同时支持日志中转、过滤、解析、切分、日志报警等 ● 云原生的日志形态&#xf…

Linux信号机制

转自:深入理解Linux信号机制(1.0)_城中之城的博客-CSDN博客 一、信号机制概览 相信大家对信号并不陌生,很多人都用过kill命令或者CtrlC组合键杀死过进程,或者遇到过程序因为收到SIGSEGV信号而崩溃的。而对信号的基本原理,估计很…

常用的k8s管理命令

Kubernetes 是一个由主节点和工作节点组成的容器编排工具。它只允许通过作为控制平面核心组件的 API 服务器进行通信。API 服务器公开了一个 HTTP REST API,允许内部组件(如用户和集群)和外部组件之间的通信。 你可以将 API 服务器视为 Kuber…

【误差自适应跟踪方法AUV】自适应跟踪(EAT)方法研究(Matlab代码Simulin实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

路径规划算法:基于人工蜂鸟优化的路径规划算法- 附代码

路径规划算法:基于人工蜂鸟优化的路径规划算法- 附代码 文章目录 路径规划算法:基于人工蜂鸟优化的路径规划算法- 附代码1.算法原理1.1 环境设定1.2 约束条件1.3 适应度函数 2.算法结果3.MATLAB代码4.参考文献 摘要:本文主要介绍利用智能优化…

C# HTTP Error 500.19

解决办法&#xff1a; .vs configapplicationhost.config 修改<section name"windowsAuthenticationnurununoverrideModeDefault"Allow”/>

内网渗透之kerberos协议解析

kerberos协议简介&#xff1a; Kerberos协议是由麻省理工学院&#xff08;MIT&#xff09;开发的一种网络身份验证协议&#xff0c;用于在非安全网络中实现安全的身份验证。其设计目标是通过密钥系统为客户与服务器应用程序提供强大的认证服务。 Kerberos协议要解决的实际上就…