java 责任链模式 链表_责任链模式的实现及源码中应用

01

责任链模式的实现

假设一个出差任务的流程需要审批出差行程和出差报销金额。那么,对应两个部门的审核。我们先定义一个出差任务Task类:

57bc42b5a69c5b43f59f92b3562dc95e.png

然后,我们定义一个抽象的处理类Handler,其中具体的处理方法Handle交给子类去实现。

a9f854e6f7cce1008313b20823c91262.png

然后,出差行程的审核者继承了Handler,并实现了其中的Handle方法。其中,处理成功,需要判断是否有下一个Handler,如果有则传递下去。

fba12ee97b9ee9a984aaaf30d6c24934.png

然后继续实现出差金额的审核者MoneyHandler,其处理思路和上面类似。

c37c6e12a8f9e8ebdda8289e2209a747.png

测试类如下,首先创建出差任务。然后在应用层设置处理流程(即有哪几个Handler),然后从第一个流程开始启动。

75e61df7d8004f8c2f3d13e71c61f24f.png

测试结果如下,从测试结果可以看出,正常处理。如果某一个审核不通过,则会终止当前的Handler向下传播。

5b3cfbefb06a22a4c26f45f3b70a3a5d.png

02

Netty中的源码

在Netty中的Pipeline上是基于链表实现的责任链。在Pipeline上添加Handler,最终Handler会在责任链上传递。

f5e08976e45dc039dbbd05b10a84979f.png

13596f7d628b6669e3eaf211fe04d074.png

具体可以参考Netty中的源码。

此外,在Servlet中的Filter也是基于责任链模式实现的,与上面的案例实现方式一致。

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

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

相关文章

JQuery $.each遍历JSON字符串报Uncaught TypeError:Cannot use 'in' operator to search for

查看一个简单的jQuery的例子来遍历一个JavaScript数组对象。 [js] view plaincopy var json [ {"id":"1","tagName":"apple"}, {"id":"2","tagName":"orange"}, {"id":&quo…

php setcookie 过期,php cookie怎么设置过期时间?

PHP中可以使用setcookie()函数设置cookie的过期时间。语法为“setcookie(name,value,expire,path,domain,secure)”;其中expire参数用于指定cookie的有效期,即过期时间戳。setcookie() 函数向客户端发送一个 HTTP cookie。cookie 是由服务器发送到浏览器…

nginx自定义500、404错误页面

1,首先在http添加以下内容 http{ fastcgi_intercept_errors on; } 2,server中添加以下内容: 注意路径 error_page 500 502 503 504 /500.html; location /500.html { internal; } error_page 404 /404.html; location /404.html { intern…

php如何输出复选框的值,php 怎么输出复选框呢?

表单有6个复选框,如果选中的分别是第126个,数据库存为 1,2,6现在的问题是 在修改的页面 怎么用php从数据库取值,输出6个复选框,让126为checked ?回复讨论(解决方案)$row[id]1;>我的意思是 从…

jQuery Mobile动态刷新页面样式

见 百度经验 http://jingyan.baidu.com/article/7f766dafbc18f24101e1d014.html JQM里面当我们更新了某些页面标签(如: listview, radiobuttons, checkboxes, select menus)里的数据时,必须做refresh操作. 为什么必须做refresh操作操作呢?因为JQM在做页面渲染的时候,为了使样…

R-CNN论文翻译

R-CNN论文翻译Rich feature hierarchies for accurate object detection and semantic segmentation用于精确物体定位和语义分割的丰富特征层次结构2017-11-29摘要过去几年,在权威数据集PASCAL上,物体检测的效果已经达到一个稳定水平。效果最好的方法是融…

inflate简介,LayoutInflater和inflate()方法的用法

一、inflate简介 inflate这个方法总共有四种形式(见下面),目的都是把xml表述的layout转化为View对象。 其中有一个比较常用,View inflate(int resource, ViewGroup root),另三个,其实目的和这个差不多。 …

php ci框架 实例化类,php框架CI(codeigniter)自动加载与自主创建对象操作实例分析...

本文实例讲述了php框架CI(codeigniter)自动加载与自主创建对象操作。分享给大家供大家参考,具体如下:CI的autoload很好用,自动创建对象,但是注意,他的对象只有一个。我们很多情况下需要生成对象,这就很麻烦…

sass、gulp应用

Sass介绍n CSS 不是一个编程语言,可以用它来开发网页样式,但是没有办法用它进行编程。SASS 的出现,让 CSS 实现了通过代码编程来实现的方式。n SASS 是一种 CSS 开发工具,提供了许多便利的写法,让CSS 的处理实现了可编…

自定义控件SettingItemView

一、效果图 选中&#xff1a;显示自动更新开启不选择&#xff1a;显示自动更新关闭------------在布局文件中的使用方式和android自生的控件一样 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.andro…

php中如何存储多个文本框,php-如何将每个字符的文本框拆分为多个子文本框

我正在设计一个PHP表单,其中包含一些输入字段,如下图所示.如何将输入类型(文本框)拆分为单个字符子文本框,或将文本框拆分为给定字符串的每个字符的多列文本框.以及如何在其中插入数据| JOHN DOE |进入| J | O | H | N | | D | O | E |这样解决方法:的HTML的CSS#text{backgroun…

为什么会有 AOP

为什么80%的码农都做不了架构师&#xff1f;>>> AOP 面向切面的编程。 先上三张图片 三处对数据库进行操作&#xff0c; 但这三处有大量的重复的代码&#xff0c;每次都是获取session&#xff0c;获取mapper&#xff0c;执行&#xff0c; commit&#xff0c;close…

PHP有表单和js交互乱码问题,js 和 php交互问题

就是前端js发送数据给php处理&#xff0c;然后处理完之后接受php发送的返回结果&#xff0c;不用ajax&#xff0c;有其他的方法吗&#xff1f;多谢&#xff01;iframe 公子 说的很明白了。Flashiframe内嵌个表单提交到PHP页面并显示结果&#xff0c;JS读取iframe页面内的内容即…

Android应用检查更新下载安装打开

一、效果 低版本1.02检测到新版本1.03 调用android的安装activity页面 安装完成 打开 1.03版本 二、注意 必须使用签名的应用。因为android不管是虚拟机还是真机安装应用都需要签名。 在开发时&#xff0c;我们运行程序时&#xff0c;开发环境ADT会自动给我们加入一个默认的…

lnmp解析php,搭建LNMP,可以解析PHP文件-Go语言中文社区

一、安装 nginx1. yum -y install pcre-devel zlib-devel links 下载相应软件可以使用rpm -qa 软件名 来查看是否安装成功??2.useradd -u 250 -M -s /sbin/nologin nginx 建立程序用户&#xff0c;降低权限3.tar xf nginx-1.6.0.tar.gz -C /usr/src/nginx 解压并指定…

Linux vi 编辑器常见命令的使用

Linux vi 编辑器常见命令的使用 Linux下的文本编辑器有很多种&#xff0c;vi 是最常用的&#xff0c;也是各版本Linux的标配。注意&#xff0c;vi 仅仅是一个文本编辑器&#xff0c;可以给字符着色&#xff0c;可以自动补全&#xff0c;但是不像 Windows 下的 word 有排版功能。…

给控件添加小图标

一、效果 二、知识点 三、代码 <TextViewstyle"style/ContentStyle"android:drawableLeft"android:drawable/star_big_on"android:gravity"center"android:text"远程锁屏:#*lockscreen*#" />

加速计算,为何会成为 AI 时代的计算力“新宠”

随着科技的发展&#xff0c;处理大量数据和进行复杂计算的需求越来越高&#xff0c;人工智能、大数据和物联网等领域更是如此&#xff0c;传统的计算方式已经无法满足这些需求。因此&#xff0c;加速计算作为一种现代计算方式&#xff0c;成了必要的手段。加速计算具有前所未有…

Java中nextfloat怎么用,关于java的nextFloat()后面跟一个nextLine()

ArrayList studentInfors new ArrayList();Scanner sc new Scanner(System.in);for (int i 0; i StudentInfor studentInfor new StudentInfor();System.out.print("请输入学生学号&#xff1a;");studentInfor.setNum(sc.nextLine());System.out.print("请…

背景选择器selector替换按钮默认背景

一、效果 正常状态 获取焦点或按下 按钮的背景图片是.9图&#xff0c;.9图的制作过程&#xff0c;见下面博文 http://blog.csdn.net/zengmingen/article/details/50193245 二、步骤 模仿android自带的按钮控件编写1、找到android自带按钮的样式。D:\ADT\sdk\platforms\andro…