当前位置: 首页 > news >正文

浅析Java责任链模式实现

一、概要
定义:责任链模式是一种行为设计模式, 允许你将请求沿着处理者链进行发送。收到请求后, 每个处理者均可对请求进行处理, 或将其传递给链上的下个处理者。

二、应用场景:
1.多条件流程判断:权限相关控制
2.过滤器:在Servlet中,过滤器就是使用责任链模式实现的。每个过滤器都可以决定是否处理请求,或者将其转发给下一个过滤器进行处理。
3.异常处理:在Java中,可以使用责任链模式来处理异常。首先,程序先尝试使用自定义的异常处理器来处理异常,如果该处理器无法处理异常,则将其转发给下一个处理器进行处理。

三、使用案例
1.首先先定义一个抽象类

public abstract class ChainHandler {private ChainHandler processor;public void setNextProcessor(ChainHandler processor){this.processor=processor;}public abstract void handlerRequest();
}

2.接着我们定义2个实现类。
第一个:

import java.util.Objects;public class FirstStepHandler extends ChainHandler{private ChainHandler processor;private Object obj;public FirstStepHandler(Object obj){this.obj=obj;}@Overridepublic void setNextProcessor(ChainHandler processor){this.processor=processor;}@Overridepublic void handlerRequest() {if(Objects.isNull(obj)) {System.out.println("责任链第一步处理,处理完成,到此结束");return;}System.out.println("责任链第一步处理,处理完成,流转下一步");if (Objects.isNull(processor)) {System.out.println("责任链已到底");return;}processor.handlerRequest();}
}

第二个:

import java.util.Objects;public class SecondStepHandler extends ChainHandler{private ChainHandler processor;private Object obj;public SecondStepHandler(Object obj){this.obj=obj;}@Overridepublic void setNextProcessor(ChainHandler processor){this.processor=processor;}@Overridepublic void handlerRequest() {if(Objects.isNull(obj)) {System.out.println("责任链第二步处理,处理完成,到此结束");return;}System.out.println("责任链第二步处理,处理完成,流转下一步");if (Objects.isNull(processor)) {System.out.println("责任链已到底");return;}processor.handlerRequest();}
}

3.最后我们可以测试一下。

public class ChainMain {public static void main(String[] args) {ChainHandler chainOne= new FirstStepHandler(new Object());ChainHandler chainTwo= new SecondStepHandler(new Object());chainOne.setNextProcessor(chainTwo);chainOne.handlerRequest();}
}

结果如下:
在这里插入图片描述
大家有兴趣可以了解下。

http://www.lryc.cn/news/168009.html

相关文章:

  • SpringBoot雪花算法主键ID传到前端后精度丢失问题的解决
  • vue使用elementUI的upload上传文件封装
  • cenos自动启动tomcat
  • OSI模型与数据的封装
  • 【李沐深度学习笔记】数据操作
  • 【蓝桥杯选拔赛真题61】Scratch小猫照镜子 少儿编程scratch图形化编程 蓝桥杯选拔赛真题解析
  • vue3将页面导出成PDF文件(完美解决图片、表格内容分割问题)
  • 软件测试:黑盒测试用例的四种设计方法
  • 数据库开发-MySQL基础DQL和多表设计
  • PowerDesigner 逆向工程以及IDEA中UML插件
  • 企业架构LNMP学习笔记56
  • [Linux入门]---搭建Linux环境
  • 性能测试知多少---性能分析与调优的原理
  • “对象创建”模式
  • ipad手写笔有必要买吗?好用的平板触控笔
  • OpenGL ES视频特效开发参考Shadertoy参数详解参考Godot文档
  • java:逆序排序的三种方法
  • pgsql操作json类型
  • Thinkphp6 配置并使用redis图文详解 小皮面板
  • 模拟实现链式二叉树及其结构学习——【数据结构】
  • 基于go版本的LoraWAN Server 的470MHz频段的设置
  • C与C++的函数相互调用
  • MySQL架构介绍与说明
  • three3D的vite+vue版本基础代码
  • 实现按钮悬停动画
  • 【C++】深拷贝和浅拷贝 ② ( 默认拷贝构造函数是浅拷贝 | 代码示例 - 浅拷贝造成的问题 )
  • 【Selenium】webdriver.ChromeOptions()官方文档参数
  • pytorch代码实现之动态卷积模块ODConv
  • 动态规划:子序列问题(C++)
  • ORACLE的分区(一)