传统责任链模式和变种责任链模式
一、传统责任链模式
传统责任链模式是事件在链条中的某一节进行处理,而变种责任链模式是事件会在链条的每一节都进行处理,每一节担当的责任各不相同。
1.一个接口或抽象类
定义一个接口,一个方法,判断数值是否正确。这里简单的自定义判断数值是否正确,规则随便怎么写。
package com.ykq;/*** 数值处理接口类*/
public interface NumInf {/*** 检查数值是否正确** @param num int* @return boolean*/public boolean checkNumCurrent(int num);
}
2.多个实现类
多个实现类都实现上面的接口,重写方法。这样责任链的每个类都有一个相同的方法。
1.小于5的数值定义该数值正确或错误
package com.impl;import com.ykq.NumInf;/*** <= 5的数值处理*/
public class FiveImpl implements NumInf {private NumInf nextNumImpl;public NumInf getNextNumImpl() {return nextNumImpl;}public void setNextNumImpl(NumInf nextNumImpl) {this.nextNumImpl = nextNumImpl;}public boolean checkNumCurrent(int num) {System.out.println("进入 <= 5 值的数值判断!");if(num <= 5){// 当数值小于5时,由该类处理判断是否正确// 此处校验规则由该类自己决定,不受其他类干涉if(num % 2 == 0){return true;} else {return false;}} else {return nextNumImpl.checkNumCurrent(num);}}
}
2.小于10的数值定义该数值正确或错误
package com.impl;import com.ykq.NumInf;/*** <= 10的处理*/
public class TenImpl implements NumInf {private NumInf nextNumImpl;public NumInf getNextNumImpl() {return nextNumImpl;}public void setNextNumImpl(NumInf nextNumImpl) {this.nextNumImpl = nextNumImpl;}public boolean checkNumCurrent(int num) {System.out.println("进入 <= 10 值的数值判断!");if(num <= 10){// 当数值小于10时,由该类处理判断是否正确// 此处校验规则由该类自己决定,不受其他类干涉if(num % 2 == 0){return false;} else {return true;}} else {return nextNumImpl.checkNumCurrent(num);}}
}
3.小于100的数值定义该数值正确或错误
package com.impl;import com.ykq.NumInf;/*** <= 100的数值处理*/
public class HundredImpl implements NumInf {private NumInf nextNumImpl;public NumInf getNextNumImpl() {return nextNumImpl;}public void setNextNumImpl(NumInf nextNumImpl) {this.nextNumImpl = nextNumImpl;}public boolean checkNumCurrent(int num) {System.out.println("进入 <= 100 值的数值判断!");if(num <= 100){// 当数值小于100时,由该类处理判断是否正确// 此处校验规则由该类自己决定,不受其他类干涉switch(num){case 20:case 30:case 40:case 50:case 60:case 70:case 80:case 90:return true;default:return false;}} else {return nextNumImpl.checkNumCurrent(num);}}
}
4.小于1000的数值定义该数值正确或错误
package com.impl;import com.ykq.NumInf;/*** <= 1000的数值处理*/
public class ThousandImpl implements NumInf {private NumInf nextNumImpl;public NumInf getNextNumImpl() {return nextNumImpl;}public void setNextNumImpl(NumInf nextNumImpl) {this.nextNumImpl = nextNumImpl;}public boolean checkNumCurrent(int num) {System.out.println("进入 <= 1000 值的数值判断!");if(num <= 1000){// 当数值小于1000时,由该类处理判断是否正确// 此处校验规则由该类自己决定,不受其他类干涉switch(num){case 200:case 300:case 400:case 500:case 600:case 700:case 800:case 900:return false;default:return true;}} else {return nextNumImpl.checkNumCurrent(num);}}
}
5.更大的数值定义该数值正确或错误
package com.impl;import com.ykq.NumInf;/*** 更大的数值处理*/
public class BiggerImpl implements NumInf {private NumInf nextNumImpl;public NumInf getNextNumImpl() {return nextNumImpl;}public void setNextNumImpl(NumInf nextNumImpl) {this.nextNumImpl = nextNumImpl;}public boolean checkNumCurrent(int num) {System.out.println("进入 > 1000 值的数值判断!");return false;}
}
那么实际上,对于上述责任链,我还可以继续扩充责任链的节点。小于0的方向可以扩充,大于1000的方向也可以扩充。
3.main实现
main的实现可以设置链条的每一节,这样使得责任链具有灵活性。
下面的实现,则是把上面已有的节点类,都加入了进来。
那么实际上我少一个或两个节点,对于数值的判断正误,很可能的接口就是返回的结果不一样。
package com;import com.impl.*;
import com.ykq.NumInf;public class MainClass {public static void main(String[] args){FiveImpl fiveImpl = new FiveImpl();TenImpl tenImpl = new TenImpl();HundredImpl hundredImpl = new HundredImpl();ThousandImpl thousandImpl = new ThousandImpl();BiggerImpl biggerImpl = new BiggerImpl();fiveImpl.setNextNumImpl(tenImpl);tenImpl.setNextNumImpl(hundredImpl);hundredImpl.setNextNumImpl(thousandImpl);thousandImpl.setNextNumImpl(biggerImpl);// 判断数boolean值System.out.println(fiveImpl.checkNumCurrent(999));}
}
二、变种责任链模式
我们常见的变种责任链就是过滤器。Filter提供一个接口,我们实现接口,然后通过链条的方式走到下一个过滤器。
传统责任链模式和变种责任链模式相关推荐
- Java设计模式之责任链模式(纯责任链和不纯责任链模式)
一.概述 避免将一个请求的发送者与接收者耦合在一起,让多个对象都有机会处理请求.将接收请求的对象连接成一条链,并且沿着这条链传递请求,知道有一个对象能够处理它为止. 二.结构与实现 结构 (1)Han ...
- [转]《JAVA与模式》之责任链模式
http://www.cnblogs.com/java-my-life/archive/2012/05/28/2516865.html 在阎宏博士的<JAVA与模式>一书中开头是这样描述责 ...
- 《JAVA与模式》之责任链模式
2019独角兽企业重金招聘Python工程师标准>>> 详细请访问原博客:http://www.cnblogs.com/java-my-life/archive/2012/05/28 ...
- java里面的环链怎么做_Java模式开发之责任链模式
从前往后按照一定操作顺序进行 申明一个过滤器接口,里面有一个"方法申明" 叫 规则过滤,返回处理后的结果 申明一些具体的操作类,全部实现过滤器接口,重写里头规则过滤的方法,返回规 ...
- 设计模式-责任链模式变体之管道模式
一.管道模式的定义 管道模式(Pipeline Pattern) 是责任链模式(Chain of Responsibility Pattern)的常用变体之一.在管道模式中,管道扮演着流水线的角色 ...
- 责任链模式(Chain of Responsibility模式)
在现实生活中,一个事件需要经过多个对象处理是很常见的场景.例如,采购审批流程.请假流程等.公司员工请假,可批假的领导有部门负责人.副总经理.总经理等,但每个领导能批准的天数不同,员工必须根据需要请假的 ...
- java责任链设计模式 订单_Java责任链设计模式实例分析
本文实例讲述了Java责任链设计模式.分享给大家供大家参考,具体如下: 一 代码 abstract class AbstractHandler { private Handler Handler = ...
- 区块链项目探索商业模式迫切需要新思路 |链捕手
尽管区块链技术的发展乃大势所趋,但它作为一项落地缓慢.仍处于探索阶段的新兴产业,其商业模式仍然是个大问题.尽管这些大多可以凭借外部融资获取运营资金,但由于加密货币二级市场剧烈动荡.技术突破迟迟推迟等原 ...
- 李广磊:区块链传统行业创新峰会浅谈区块链
在七月十三日,区块链传统行业创新峰会结束之后记者采访到了IMC全球美丽链的天使投资人李广磊.他选择IMC成为IMC全球美丽链的天使投资人,以及如何看待区块链未来前景. 记者:您觉得在接下来的发展中,中 ...
最新文章
- Mysql 数据库命令行导出导入sql脚本
- XSKY发布两款存储产品 以Ceph为核心
- 教你如何玩转redis-简单消息队列
- Python进阶03 模块
- 当ABAP遇到OLE
- 汉字我在计算机中的处理过程,详细说明汉字在计算机中的处理流程以及汉字编码在处理过程中的转化关系...
- python大型项目教程_在大型项目开发上,python真是个“烂语言”吗?
- 南方cass快捷键命令修改在哪_南方cass快捷键命令大全
- 华为2019年3月软件开发工程师机考题解答 C++实现
- 数学之美番外篇:平凡而又神奇的贝叶斯方法(转自刘未鹏)
- ArcGIS教程 - 3 ArcGIS快速入门
- 超级详细的HTML5讲解
- win7共享xp打印机_快速有效的局域网共享方法,十年老技术现身说法亲测可用
- Java实验报告(三)
- 安装sql server 2000时又出现:安装程序配置服务器失败。参考服务器错误日志和 C:/WINNT/sqlstp.log 了解更多信息。
- 计算机考研数据结构考试大纲,2017考研大纲:计算机考研大纲文字版之数据结构...
- 3-搜索某网站的职位
- 原码 反码 补码三者之间的关系
- 谈软件开发工具的选择
- 语音识别中强制对齐_一种在线语音文本对齐系统及方法