责任链模式

  设计模式很多时候都是看见名字都知道意思,责任链,见名知义为请求创建一系列处理对象。 此模式基于请求的类型将请求的发送方和接收方分离。通常每个接收器包含对另一个接收器的引用。如果一个对象不能处理请求,则它将相同的对象传递给下一个接收者,这样形成一条链。这种模式属于行为模式。基于这种情况,我写了一个字符串判断是否为null或者""的责任链,先去判断null、判断不出来在判断"",这样就形成一条链。简单简洁粗暴

责任链模式UML图

责任链模式代码

package com.roc.responsibility;
/**
* 判断是否为空的抽象类
* @author liaowp
*
*/
public abstract class IsEmptyAbstract { protected IsEmptyAbstract isEmptyAbstract; public void setIsEmptyAbstract(IsEmptyAbstract isEmptyAbstract) {
this.isEmptyAbstract = isEmptyAbstract;
} public boolean inputMsg(String str){
if(isEmpty(str)){//
return true;
}else{//如果没有判断出来就传入下一个
if(isEmptyAbstract !=null){
return isEmptyAbstract.isEmpty(str);
}else{
System.out.println("判断器没有初始化");
return false;
}
}
} /**
* 判断是否为空
* @return
*/
abstract protected boolean isEmpty(String str);
}
package com.roc.responsibility;
/**
* 判断是不是null
* @author liaowp
*
*/
public class isNull extends IsEmptyAbstract{ @Override
protected boolean isEmpty(String str) {
return null==str;
} }
package com.roc.responsibility;
/**
* 判断是不是""
* @author liaowp
*
*/
public class IsEmpty extends IsEmptyAbstract{ @Override
protected boolean isEmpty(String str) {
return "".equals(str);
}
}
package com.roc.responsibility;
/**
* 责任链模式
* @author liaowp
*
*/
public class Client { public static void main(String[] args) {
String str = "";
isNull isNull = new isNull();
IsEmpty isEmpty = new IsEmpty();
isNull.setIsEmptyAbstract(isEmpty);
System.out.println(isNull.inputMsg(str));
}
}

责任链模式适用场景

1、有多个对象共同对一个任务进行处理。

2、这些对象使用链式存储结构,形成一个链,每个对象知道自己的下一个对象。

3、一个对象对任务进行处理,可以添加一些操作后将对象传递个下一个任务。也可以在此对象上结束任务的处理,并结束任务。

最新文章

  1. 解惑好文:移动端H5页面高清多屏适配方案 (转)
  2. Target runtime com.genuitec.runtime.generic.jee50 is not defined
  3. iOS 全屏布局
  4. NullableKey:解决Dictionary中键不能为null的问题 zt
  5. sicp第1章
  6. Python操作MySQL -即pymysql/SQLAlchemy用法
  7. 第九十九节,JavaScript数据类型
  8. Java利用POI生成Excel强制换行
  9. Lua中的userdata
  10. lxml.etree.HTML(text) 解析HTML文档
  11. 简化equals()方法的重写
  12. laravel 路由模型绑定
  13. git打tag
  14. BZOJ4808马——二分图最大独立集
  15. 使用Buildozer部署Kivy到移动设备上
  16. django2笔记:路由path语法
  17. Servlet下载文件迅雷不支持问题真相之一
  18. javascript 中的类数组和数组
  19. HIVE-分桶表的详解和创建实例
  20. 电信NB-IOT的温湿度采集器开发记录

热门文章

  1. 关于Ansi_Nulls、Quoted_Identifier、Ansi_Padding的用法
  2. Ubuntu纯字符界面的一些设置
  3. 谷歌YSlow准则
  4. Java变量&&简单程序流程&&循环
  5. 《C++ Primer》读书笔记—第一章 开始
  6. Raid0、Raid1、Raid0+1、Raid3和Raid5 几种磁盘阵列区别
  7. P1137 旅行计划-----洛谷
  8. oracle 数据库删除表或表数据恢复问题
  9. 极光推送CTO黄鑫:技术人员要建立自己的知识图谱
  10. Array对象方法属性总结