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

责任链模式简单实现

两种实现方式

第一种

public interface IBaseTask {public void doAction(String isTask,IBaseTask iBaseTask);
}
public class ChainManager implements IBaseTask{//工作类的集合private List<IBaseTask> iBaseTaskList = new ArrayList<>();public void addTask(IBaseTask iBaseTask){iBaseTaskList.add(iBaseTask);}//下标private int index = 0;@Overridepublic void doAction(String isTask, IBaseTask iBaseTask) {if(iBaseTaskList.isEmpty()){};if (index >= iBaseTaskList.size()){return;}//获取对应下标的任务对象IBaseTask baseTask = iBaseTaskList.get(index);index ++;//执行任务baseTask.doAction(isTask,iBaseTask);}
}

//创建三个责任链对象

public class TaskOne implements IBaseTask{@Overridepublic void doAction(String isTask, IBaseTask iBaseTask) {if ("1".equals(isTask)) {System.out.println("拦截器1处理了");}else{iBaseTask.doAction(isTask,iBaseTask);}}
}
public class TaskTwo implements IBaseTask{@Overridepublic void doAction(String isTask, IBaseTask iBaseTask) {if ("2".equals(isTask)) {System.out.println("拦截器2处理了");}else{iBaseTask.doAction(isTask,iBaseTask);}}
}
public class TaskThree implements IBaseTask{@Overridepublic void doAction(String isTask, IBaseTask iBaseTask) {if ("3".equals(isTask)) {System.out.println("拦截器3处理了");}else{iBaseTask.doAction(isTask,iBaseTask);}}
}

执行

private void zerenlian1() {ChainManager chainManager = new ChainManager();chainManager.addTask(new TaskOne());chainManager.addTask(new TaskTwo());chainManager.addTask(new TaskThree());//从TaskOne开始执行不对的话就自动执行TaskTwochainManager.doAction("2",chainManager);//返回结果 "拦截器2处理了"}

第二种

public abstract class BaseTask {private boolean isTask;public BaseTask(boolean isTask) {this.isTask = isTask;}private BaseTask nextTask;public void addTask(BaseTask nextTask){this.nextTask = nextTask;}public abstract void doAction();public void action(){if(isTask){doAction();}else{if(nextTask != null){nextTask.action();}}}
}
public class Task1 extends BaseTask{public Task1(boolean isTask) {super(isTask);}@Overridepublic void doAction() {System.out.println("节点1已被执行");}
}
    private void zerenlian() {Task1 task1 = new Task1(false);Task2 task2 = new Task2(false);Task3 task3 = new Task3(true);task1.addTask(task2);task2.addTask(task3);task1.action();}

相关文章:

责任链模式简单实现

两种实现方式 第一种 public interface IBaseTask {public void doAction(String isTask,IBaseTask iBaseTask); }public class ChainManager implements IBaseTask{//工作类的集合private List<IBaseTask> iBaseTaskList new ArrayList<>();public void addTas…...

Excel自动化办公——Openpyxl的基本使用

Excel自动化办公——Openpyxl的基本使用 个人感觉&#xff0c;相比Pandas&#xff0c;openpyxl对Excel的操作更为细致&#xff0c;Pandas则更适用于统计计算&#xff1b; 01 基本环境02 Excel数据读取操作03 案例04 向Excel写入数据05 表数据定向修改06 单元格样式制定07 单元…...

解决Fastjson2 oom(Out Of Memory),支持大对象(LargeObject 1G)json操作

在使用Fastjson中的 JSON.toJSONString时,如果对象数据太大&#xff08;>64M&#xff09;会出现Out Of Memory,查看源码发现为JSONWriter中的判断代码 其中maxArraySize默认最大为64M,如果超过了就会抛出oom错误 如果fastjson过多的使用内存,也可能导致java堆内存溢出,所以这…...

SpringBoot + redis处理购物车逻辑

1、pom.xml <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency> 2、application.xml spring: characterEncodingutf-8&useSSLfalseredis:host: 127.0.…...

open cv学习 (五) 图像的阈值处理

图像的阈值处理 demo1 # 二值化处理黑白渐变图 import cv2 img cv2.imread("./img.png", 0) # 二值化处理 t1, dst cv2.threshold(img, 127, 255, cv2.THRESH_BINARY) cv2.imshow("img", img) cv2.imshow("dst", dst) cv2.waitKey() cv2.des…...

NVIDIA vGPU License许可服务器高可用全套部署秘籍

第1章 前言 近期遇到比较多的场景使用vGPU&#xff0c;比如Citrix 3D场景、Horizon 3D场景&#xff0c;还有AI等&#xff0c;都需要使用显卡设计研发等&#xff0c;此时许可服务器尤为重要&#xff0c;许可断掉会出现掉帧等情况&#xff0c;我们此次教大家部署HA许可服务器。 …...

基于CNN卷积神经网络的口罩检测识别系统matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 ............................................................ % 循环处理每张输入图像 for…...

《HeadFirst设计模式(第二版)》第九章代码——迭代器模式

情景&#xff1a; 一家早餐店和一家午餐点准备合并在一起&#xff0c;两家的点菜的菜单实现方式如下: 首先&#xff0c;他们的菜单选项都基于同一个类&#xff1a; 菜单选项类 package Chapter9_IteratorPattern.Origin;/*** Author 竹心* Date 2023/8/17**/public class Men…...

Electron入门,项目启动。

electron 简单介绍&#xff1a; 实现&#xff1a;HTML/CSS/JS桌面程序&#xff0c;搭建跨平台桌面应用。 electron 官方文档&#xff1a; [https://electronjs.org/docs] 本文是基于以下2篇文章且自行实践过的&#xff0c;可行性真实有效。 文章1&#xff1a; https://www.cnbl…...

深入理解索引B+树的基本原理

目录 1. 引言 2. 为什么要使用索引&#xff1f; 3. 索引的概述 4. 索引的优点是什么&#xff1f; 4.1 降低数据库的IO成本&#xff0c;提高数据查找效率 4.2 保证数据库每一行数据的唯一性 4.3 加速表与表之间的连接 4.4 减少查询中分组与排序的执行时间 5. 索引的缺点…...

vue3 简易用对话框实现点击头像放大查看

设置头像悬停手势 img:hover{cursor: pointer;}效果&#xff1a; 编写对话框 <el-dialog class"bigAvatar"style"border-radius: 4px;"v-model"deleteDialogVisible"title"查看头像"top"5px"><div><img src&…...

opencv 矩阵运算

1.矩阵乘&#xff08;*&#xff09; Mat mat1 Mat::ones(2,3,CV_32FC1);Mat mat2 Mat::ones(3,2,CV_32FC1);Mat mat3 mat1 * mat2; //矩阵乘 结果 2.元素乘法或者除法&#xff08;mul&#xff09; Mat m Mat::ones(2, 3, CV_32FC1);m.at<float>(0, 1) 3;m.at…...

第四章 字符串part01

344.反转字符串 public void reverseString(char[] s) {int len s.length;int left 0;int right len-1;while (left < right){char tmp s[right];s[right] s[left];s[left] tmp;left;right--;} }反转字符串II 注意String不可变&#xff0c;因此可使用char数组或者St…...

Python3内置函数大全

吐血整理 Python3内置函数大全 1.abs()函数2.all()函数3.any()函数4.ascii()函数5.bin()函数6.bool()函数7.bytes()函数8.challable()函数9.chr()函数10.classmethod()函数11.complex()函数12.complie()函数13.delattr()函数14.dict()函数15.dir()函数16.divmod()函数17.enumer…...

什么是“新型基础设施”?建设重点是什么?

一是信息基础设施。主要是指基于新一代信息技术演化生成的基础设施&#xff0c;比如&#xff0c;以5G、物联网、工业互联网、卫星互联网为代表的通信网络基础设施&#xff0c;以人工智能、云计算、区块链等为代表的新技术基础设施&#xff0c;以数据中心、智能计算中心为代表的…...

混杂接口模式---vlan

策略在两个地方可以用--1、重发布 2、bgp邻居 2、二层可以干的&#xff0c;三层也可以干 3、未知单播&#xff1a;交换机的MAC地址表的记录保留时间是5分钟&#xff0c;电脑的ARP表的记录保留时间是2小时 4、route recursive-lookup tunnel 华为默认对于bgp学习来的路由不开启标…...

Greenplum多级分区表添加分区报错ERROR: no partitions specified at depth 2

一般来说&#xff0c;我们二级分区表都会使用模版&#xff0c;如果没有使用模版特性&#xff0c;那么就会报ERROR: no partitions specified at depth 2类似的错误。因为没有模版&#xff0c;必须要显式指定分区。 当然我们在建表的时候&#xff0c;如果没有指定&#xff0c;那…...

EV PV AC SPI CPI TCPI

SPI EV / PV CPI EV / ACCPI 1.25 SPI 0.8 PV 10 000 BAC 100 000EV PV * SPI 10 000 * 0.8 8000 AC EV / CPI 8000 / 1.25 6400TCPI (BAC - EV) / (BAC -AC) (100 000 - 8 000) / (100 000 - 6 400) 92 000 / 93 600 0.98290598...

【电商领域】Axure在线购物商城小程序原型图,品牌自营垂直电商APP原型

作品概况 页面数量&#xff1a;共 60 页 兼容软件&#xff1a;Axure RP 9/10&#xff0c;不支持低版本 应用领域&#xff1a;网上商城、品牌自营商城、商城模块插件 作品申明&#xff1a;页面内容仅用于功能演示&#xff0c;无实际功能 作品特色 本作品为品牌自营网上商城…...

Cpp基础Ⅰ之编译、链接

1 C是如何工作的 工具&#xff1a;Visual Studio 1.1 预处理语句 在.cpp源文件中&#xff0c;所有#字符开头的语句为预处理语句 例如在下面的 Hello World 程序中 #include<iostream>int main() {std::cout <"Hello World!"<std::endl;std::cin.get…...

NotebookLM多源文档交叉去重实战:基于BERT-Embedding相似度阈值调优(附可复用Python脚本)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;NotebookLM多源文档交叉去重的核心挑战与价值定位 NotebookLM 作为 Google 推出的基于引用的 AI 笔记工具&#xff0c;其核心能力依赖于对用户上传文档的语义理解与跨文档关联。然而当用户导入多个来源…...

告别点点点!用Ranorex Studio录制你的第一个计算器自动化测试(附详细截图)

从零开始&#xff1a;用Ranorex Studio实现计算器自动化测试的完整指南 第一次接触自动化测试时&#xff0c;那种既期待又忐忑的心情我至今记忆犹新。作为一位长期被重复性手工测试困扰的QA工程师&#xff0c;每天面对相同的测试用例&#xff0c;点击相同的按钮&#xff0c;验证…...

不只是CT重建:手把手教你用RTK+ITK+VS2022搭建可扩展的医学影像处理开发环境

构建医学影像算法开发平台&#xff1a;RTKITKVS2022全流程实战指南 医学影像处理领域正迎来前所未有的技术革新&#xff0c;从传统的CT重建到三维可视化、病灶自动检测等高级应用&#xff0c;开发者需要一套稳定且可扩展的开发环境。本文将带您从零开始&#xff0c;在Windows平…...

VScode:将VScode界面的显示语言改为简体中文

这是 VS Code 设置语言的标准方式&#xff0c;直接强制指定界面语言&#xff1a; 在 VS Code 界面按下快捷键 Ctrl Shift P&#xff08;Windows/Linux&#xff09;&#xff0c;Mac 用户用 Cmd Shift P&#xff0c;打开「命令面板」 在弹出的输入框里&#xff0c;输入 Confi…...

5G 网络优化工程师是骗局吗?从业15年资深老工程师实话实说

01 5G 网优岗位&#xff0c;本身真实靠谱很多人一刷到 5G 网络优化工程师这个岗位&#xff0c;第一反应都是犹豫、怀疑&#xff1a;这到底是不是收割小白的骗局&#xff1f;我在通信行业深耕整整 15 年&#xff0c;也拿到过华为高级工程师认证&#xff0c;今天以业内老兵的身份…...

如何快速搭建大众点评数据采集系统:Python爬虫完整指南

如何快速搭建大众点评数据采集系统&#xff1a;Python爬虫完整指南 【免费下载链接】dianping_spider 大众点评爬虫&#xff08;全站可爬&#xff0c;解决动态字体加密&#xff0c;非OCR&#xff09;。持续更新 项目地址: https://gitcode.com/gh_mirrors/di/dianping_spider…...

量子电路反编译技术:原理、实现与应用

1. 量子电路反编译技术概述量子计算领域近年来快速发展&#xff0c;但量子算法的可解释性始终是一个关键挑战。当我们面对一段量子汇编代码(QASM)时&#xff0c;往往难以直观理解其对应的算法逻辑。这就如同拿到一段机器码却不知道它实现的是什么功能。量子电路反编译技术正是为…...

CL API实时闭环神经控制技术解析与应用

1. CL API实时闭环神经控制技术概述在生物神经网络&#xff08;BNN&#xff09;研究领域&#xff0c;实时闭环控制技术正成为连接计算系统与生物神经元的桥梁。CL API作为这一领域的前沿工具&#xff0c;其设计哲学源于对神经电生理实验的深刻理解——当我们需要在毫秒级时间尺…...

从PyAutoGUI到OpenClaw:构建健壮桌面自动化的状态驱动技能库

1. 项目概述&#xff1a;当自动化脚本拥有“鹰爪”最近在GitHub上看到一个挺有意思的项目&#xff0c;叫Ikaros-521/openclaw-pyautogui-skill。光看名字&#xff0c;就透着一股“硬核”和“实用”的气息。Ikaros&#xff08;伊卡洛斯&#xff09;是希腊神话里那位用蜡和羽毛造…...

出库篇:仓库里的货往哪去?——WMS出库方式全解析,物流新人必读

仓库里的货往哪去&#xff1f;——WMS出库方式全解析&#xff0c;物流新人必读 摘要&#xff1a;货品有进必有出。上一期我们聊了WMS中货品的四大来源&#xff08;采购、生产、退货、调拨入库&#xff09;&#xff0c;这一期我们来看看货品是怎么“出”去的——销售出库、采购退…...