java设计模式之职责链模式
责任链模式
设计模式很多时候都是看见名字都知道意思,责任链,见名知义为请求创建一系列处理对象。 此模式基于请求的类型将请求的发送方和接收方分离。通常每个接收器包含对另一个接收器的引用。如果一个对象不能处理请求,则它将相同的对象传递给下一个接收者,这样形成一条链。这种模式属于行为模式。基于这种情况,我写了一个字符串判断是否为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、一个对象对任务进行处理,可以添加一些操作后将对象传递个下一个任务。也可以在此对象上结束任务的处理,并结束任务。
java设计模式之职责链模式的更多相关文章
- 设计模式之职责链模式(JAVA实现)
学习netty框架时,看到有人说netty用到了设计模式的职责链模式,学习一下职责链模式,主要参考大话设计模式. 主要场景: 小菜想要加薪,向经理提出加薪请求,经理没有权限,经理交由总监处理,总监也没 ...
- php设计模式之职责链模式
<?php /** * @desc php设计模式之职责链模式(责任链模式) 定义:顾名思义,责任链模式为请求创建了一个接收者对象的链.这种模式给予请求的类型,对请求的发送者和接收者进行解耦.这 ...
- 设计模式-利用职责链模式消除if
本文是对职责链设计模式的应用(变种),所以假设读者已经掌握了职责链设计模式,职责链模式只会应景简介. 本文主要内容: 需求(ShitCode) 职责链模式简介 设计理念 代码演示(消除if) 应用总结 ...
- Java设计模式之责任链模式、职责链模式
本文继续介绍23种设计模式系列之职责链模式. 什么是链 1.链是一系列节点的集合. 2..链的各节点可灵活拆分再重组. 职责链模式 使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间 ...
- Java设计模式之职责型模式总结
原创作品,可以转载,但是请标注出处地址:http://www.cnblogs.com/V1haoge/p/6548127.html 所谓职责型模式,就是采用各种模式来分配各个类的职责. 职责型模式包括 ...
- Java设计模式之职责链设计模式
1.什么是-职责链设计模式 责任链模式是一种对象的行为模式.在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链.请求在这个链上传递,直到链上的某一个对象决定处理此请求.发出这个请求 ...
- Java设计模式---ChainOfResponsibility责任链模式
参考于 : 大话设计模式 马士兵设计模式视频 代码参考于马士兵设计模式视频 写在开头:职责链模式:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系 图来自大话设计模式,下面我的代 ...
- 设计模式:职责链模式(Chain Of Responsibility)
定 义:使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系.将这些对象连成一条链,并沿着这条链传递请求,直到有一个对象处理它为止. 结构图: 处理请求类: //抽象处理类 abs ...
- 设计模式之职责链模式(Chain of Responsibility)摘录
23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式抽象了实例化过程,它们帮助一个系统独立于怎样创建.组合和表示它的那些对象.一个类创建型模式使用继承改变被实例化的类,而 ...
随机推荐
- 基于Ubuntu12.04-server版的openstack F版搭建步骤
本文为双节点搭建,分为计算(IP1)和控制节点(IP2) 说明: 计算节点组件: 1.mysql 2.keystone 3.Nova 4.glance 5.rabbitmq 控制节点组件: 1.cin ...
- django源码简析——后台程序入口
这一年一直在用云笔记,平时记录一些tips或者问题很方便,所以也就不再用博客进行记录,还是想把最近学习到的一些东西和大家作以分享,也能够对自己做一个总结.工作中主要基于django框架,进行项目的开发 ...
- Xamarin+Prism开发详解八:自动化测试之NUnit实践
自动化测试很重要!很重要!以前多是手动测试,没有写过测试用例.这样的结果就是发现bug改了之后关联的其他功能又要从新测一遍.这样既浪费时间与成本,而且很无聊.之所以选择NUnit是公司需要,现在.ne ...
- 基于DDD的.NET开发框架ABP实例,多租户 (Sass)应用程序,采用.NET MVC, Angularjs, EntityFramework-介绍
介绍 基于ABPZERO的多租户 (Sass)应用程序,采用ASP.NET MVC, Angularjs-介绍 ASP.NET Boilerplate作为应用程序框架. ASP.NET MVC和ASP ...
- Angular2 + Webpack项目搭建Demo
本文将从头开始编写实际的代码来完成一个angular2的demo. 题外话是其实angular2官网的快速开始项目已经很酷炫了,但其侧重快速二字,只够拿来练习玩耍,倒是github上确实已经有了一些不 ...
- 关于Console控制台输出的玩法
你在浏览网页的时候,是否注意过这些网页的控制台输出了什么? Console这种东西,其实一般只有前端工作者才会注意到.console在我们实际开发中可是个宝贝,他是各种error和warning的展示 ...
- 转载 JDK + Android-SDK + Python + MonkeyRunner 的安装
转载来自: 小海豚的博客 http://blog.sina.com.cn/u/1295334083 我只是搬运工... JDK + Android-SDK + Python + MonkeyRun ...
- js设计模式--策略模式
策略模式: 定义了一系列的算法,把他们封装起来,是它们之间可以互相替换,此模式不会影响到使用算法的客户. 回忆下jquery里的animate方法: $( div ).animate( {" ...
- API code
/*--------------------------------------------------- BLOKOUT2.C -- Mouse Button & Capture Demo ...
- sublime与Emment
sublime与Emment 作为一个开发者,想必用过sublime和Emment 的无不大快朵颐,这两者结合在一起简直是天合之作.它不仅仅提高编码的速度而且令开发者感到编码的乐趣和舒适感,今天准备写 ...