【梦辛工作室】IF判断优化、责任链模式 IfChain

大家好哇,我是梦辛工作室的灵,在最近的开发中,有许多需要判断的分支处理,且处理内容较多且复杂,代码就容易越写越复杂,导致后期无法继续更新跌打,然后基于这个环境,我用责任链模式写了一个工具类用于解决这个问题,并将数据、判断、处理分隔开来,这样代码的重用性也增强了,下面来看下使用效果:
在这里插入图片描述
使用方法如下:
在这里插入图片描述
这里可自定义判断器和处理器,并自由组合,并链接起来,这里的判读器需实现一个检查方法,返回true 才会执行Handler的hand 方法,
而处理器返回true的话,就表示不在继续往后判断了,返回false表示,代码还是会下一个判断器进行判断

 class  Data1Check implements IfCheck{@Overridepublic boolean check(Object[] args) {if(args != null && args.length > 0 && "data1".equals(args[0])){System.out.println("Data1Check==>" + args[0] + "检查成功,处理");return true;}System.out.println("Data1Check==>" +  args[0] + "检查失败,不处理");return false;}}class Data1Handler implements IfHandler{@Overridepublic boolean hand(Object[] args) {System.out.print(args[0]);System.out.println("已被Data1Handler处理");return false;}}class  Data2Check implements IfCheck{@Overridepublic boolean check(Object[] args) {if(args != null && args.length > 0 && "data2".equals(args[0])){System.out.println("Data2Check==>" + args[0] + "检查成功,处理");return true;}System.out.println("Data2Check==>" + args[0] + "检查失败,不处理");return false;}}class Data2Handler implements IfHandler{@Overridepublic boolean hand(Object[] args) {System.out.print(args[0]);System.out.println("已被Data2Handler处理");return true;}}

然后再来看下完整的代码:
IfChain

public class IfChain {private IfChain nextChain;private Object[] args;private IfHandler handler;private IfCheck ifCheck;public IfChain(IfCheck ifCheck,IfHandler handler){this.ifCheck = ifCheck;this.handler = handler;}private boolean check(){if (ifCheck.check(args)){return handler.hand(args);}return false;}public IfCheck getIfCheck() {return ifCheck;}public void setIfCheck(IfCheck ifCheck) {this.ifCheck = ifCheck;}public IfChain getNextChain() {return nextChain;}public void setNextChain(IfChain nextChain) {this.nextChain = nextChain;}public Object[] getArgs() {return args;}public void setArgs(Object[] args) {this.args = args;}public IfHandler getHandler() {return handler;}public void setHandler(IfHandler handler) {this.handler = handler;}public void startCheck(){if (!check() && nextChain != null){nextChain.setArgs(args);nextChain.startCheck();}}}

IfHandler

public interface IfHandler {boolean hand(Object[] args);
}

IfCheck

public interface IfCheck {boolean check(Object[] args);
}

TestIfChain


public class TestIfChain {class  Data1Check implements IfCheck{@Overridepublic boolean check(Object[] args) {if(args != null && args.length > 0 && "data1".equals(args[0])){System.out.println("Data1Check==>" + args[0] + "检查成功,处理");return true;}System.out.println("Data1Check==>" +  args[0] + "检查失败,不处理");return false;}}class Data1Handler implements IfHandler{@Overridepublic boolean hand(Object[] args) {System.out.print(args[0]);System.out.println("已被Data1Handler处理");return false;}}class  Data2Check implements IfCheck{@Overridepublic boolean check(Object[] args) {if(args != null && args.length > 0 && "data2".equals(args[0])){System.out.println("Data2Check==>" + args[0] + "检查成功,处理");return true;}System.out.println("Data2Check==>" + args[0] + "检查失败,不处理");return false;}}class Data2Handler implements IfHandler{@Overridepublic boolean hand(Object[] args) {System.out.print(args[0]);System.out.println("已被Data2Handler处理");return true;}}@Testpublic void doTest(){doCheck("data1");doCheck("data2");doCheck("data3");}private void doCheck(String data) {Object[] args = new Object[]{data};IfChain ifChainData1 = new IfChain(new Data1Check(),new Data1Handler());ifChainData1.setArgs(args);IfChain ifChainData2 = new IfChain(new Data2Check(),new Data2Handler());ifChainData2.setArgs(args);ifChainData1.setNextChain(ifChainData2);ifChainData1.startCheck();}private void doCheck2(String data){if("data1".equals(data)){System.out.println("data1已被Data1Handler");return;}if("data2".equals(data)){System.out.println("data1已被Data2Handler");return;}}
}

好了,今天的分享就到这里了
github连接 https://github.com/wintton/MxTestSql.git

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

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

相关文章

Stable Diffusion在各种显卡上的加速方式测试,最高可以提速211.2%

Stable Diffusion是一种基于扩散模型的图像生成技术,能够从文本生成高质量的图像,适用于CG,插图和高分辨率壁纸等领域。 但是它计算过程复杂,使得它的生成速度较慢。所以研究人员就创造了各种提高其速度的方式,比如Xf…

计算机视觉(二)图像特征提取

文章目录 颜色特征量化颜色直方图适用颜色空间:RGB、HSV等颜色空间操作 几何特征边缘 Edge边缘定义边缘提取 基于关键点的特征描述子引入几何特征:关键点几何特征:Harris角点FAST角点检测几何特征:斑点局部特征:SIFT预…

JavaScript 事件监听

语法:元素对象.addEventListener("事件类型",要执行的函数) 事件监听三要素: 事件源:哪个dom元素被触发了,要获取dom元素事件类型:用什么方式触发,eg:鼠标单击click、鼠标经过mouseover登事件调…

基于WebSocket实现的后台服务

基于WebSocket实现的后台服务,用于接收客户端的心跳消息,并根据心跳消息来维护客户端连接。 具体实现中,服务启动后会创建一个HttpListener对象,用于监听客户端的WebSocket连接请求。当客户端连接成功后,服务会为每个…

Linux环境PostgreSQL安装

今日一语:鲲鹏扶摇而直上九万里,雄鹰展翅高飞,这是因为鲲鹏一出世就得历劫,老鹰刚长出翅膀就会被扔下悬崖 下载安装包,解压到服务器中,然后 make && make install # 登录使用 ./psql # 切换数据库…

maven 离线模式打包

遇到问题 由于客户对于安全性的要求比较高 又想要自己打包,但不允许使用外网,这样就出现了没办法在线打包,需要离线打包。其实也很简单,只需要三步。 第一步 将项目中用到的依赖,下载到本地仓库中,然后将…

idea中Easy Code模版配置

首先找到模版位置 找到使用的模版,我用的是MybatisPlus-H,这是我新建的一个模版 controller.java.vm模版 ##导入宏定义 $!{define.vm}##设置表后缀(宏定义) #setTableSuffix("Controller")##保存文件(宏定义&#xff…

qemu搭建arm环境以及文件共享

几乎完全参照该文章 使用QEMU搭建ARM64实验环境 - 简书 ubuntu 14.04,linux3.16, busybox-1.31.0 arm-linux-gnueabi-gcc -v linux3.16以及busybox下载安装可参考链接 Ubuntu14.04安装qemu,运行linux-3.16gdb调试_qemu 安装 ubuntu 14_这个我…

Kamailio常用命令

kamctl --help:显示kamctl命令的帮助信息。 kamctl ps:列出当前的Kamailio进程列表。 kamctl stats:显示Kamailio的统计信息。 kamctl uptime:显示Kamailio的运行时间。 kamctl moni:启动Kamailio的监控模式。 ka…

Django开发股票分析系统

下面是一个简单的示例代码,展示了如何使用Django来创建一个股票管理分析系统。 首先,在你的虚拟环境中安装Django: pip install Django 然后,创建一个新的Django项目: django-admin startproject stock_management 进入…

Centos MySql安装,手动安装保姆级教程

1.删除原有的mariadb,不然mysql装不进去 查询MAriaDB命令 rpm -qa|grep mariadb 删除 rpm -e --nodeps mariadb-libs-5.5.60-1.el7_5.x86_64 (yum -y remove mysql 如需要清除服务器上以前安装过的MySQL可执行此命令,执行前一…

【数学建模】相关是一个距离指标吗?

一、说明 本文探讨最平凡的数学模型--距离模型。我们知道,任何数学模型如果是个距离模型,那么它是:放心的、自动的、不加任意条件的指标项目。然而另一些度量参数不是距离空间,因此,使用起来必须外加若干条件&#xff…

一款好用的思维导图软件drawio

最近需要画思维导图,结果发现既然被人用来收费了。所以记录一下,免得大家上当。 首先说明,这个东东在github上是免费开源的,收费的是一些不法分子搞得。下面是收费版本得界面。 开源地址: https://github.com/jgraph…

Java基础面试题04(网络编程)

什么是网络编程?它的作用是什么? 网络编程是一种用于在计算机网络中进行数据交换和通信的编程技术。它涉及到使用网络协议和相关工具来实现程序之间的通信。网络编程的目标是允许不同设备或应用程序之间进行数据传输、共享资源和进行远程控制。 网络编…

Java设计模式之 -- 桥接模式

什么是桥接模式 桥接模式是一种结构型设计模式,也被称为“Handle/Body”。这种设计模式主要用于将抽象部分与它的实现部分分离,使它们可以独立地变化。这种方式有助于减少系统中的耦合性,增加了扩展性。 主要解决什么问题 桥接模式主要解决…

MySQL主从复制环境部署

文章目录 MySQL主从复制什么是主从复制:为什么需要主从复制:配置文件修改-主:时间同步:重启服务-主:创建同步用户:查看主上的二进制文件名及位置:配置-从:测试:注: MySQL…

JUC并发编程之CompletableFuture详解

目录 1.Future接口 1.1 Future介绍 1.1.1 FutureTask 1.1.2 代码示例 2. CompletableFuture 2.1 基本概念 2.2 代码示例 2.2.1 创建CompletableFuture 2.2.2 函数式接口(补充) 2.2.3 异步任务组合 1.Future接口 1.1 Future介绍 JUC并发编程中的…

二叉树题目:从根到叶的二进制数之和

文章目录 题目标题和出处难度题目描述要求示例数据范围 解法一思路和算法代码复杂度分析 解法二思路和算法代码复杂度分析 题目 标题和出处 标题:从根到叶的二进制数之和 出处:1022. 从根到叶的二进制数之和 难度 3 级 题目描述 要求 给你二叉树…

什么是Java的JVM内存模型?

JVM内存模型是Java虚拟机的一种内存管理方式,它可以让Java程序在运行时动态地分配和释放内存,从而提高程序的性能和稳定性。如果你是一个新手,那么你可能会对JVM内存模型感到有些困惑,不知道该如何理解它。别担心,下面…

Git标签管理(对版本打标签,起别名)

tag 理解标签创建标签git tag [name]git show [tagname] 操作标签删除标签git tag -d < tagname > 推送某个标签到远程git push origin < tagname > 理解标签 标签 tag &#xff0c;可以简单的理解为是对某次 commit 的⼀个标识&#xff0c;相当于起了⼀个别名。 …