chainOfResponsibility责任链模式
责任链(Chain of Responsibility)模式 :
责任链模式是对象的行为模式。使多个对象都有机会处理请求,从而避免请求的发送者和接受者直接的耦合关系。将这些处理对象连成一条链,沿着这条链传递该请求,直到有一个对象处理它为止。责任链模式强调的是每一个对象及其对下家的引用来组成一条链,利用这种方式将发送者和接收者解耦,类图如下:

/**
* 抽象处理角色
* @author mlxs
*
*/
public abstract class Hander { /**
* 处理角色 实例
*/
protected Hander hander; /**
* 抽象处理方法:执行处理
*/
public abstract void doHander(String reqStr); public Hander getHander() {
return hander;
} public void setHander(Hander hander) {
this.hander = hander;
} }
2.添加3个具体实现子类:HanderFirst,HanderSecond,HanderLast,并实现doHander方法
/**
* 具体处理角色
* @author mlxs
*
*/
public class HanderFirst extends Hander { @Override
public void doHander(String reqStr) {
//得到当前处理角色
Hander nowHander = getHander();
//判断:如果是自己的责任,则处理,处理完后结束(return);否则,传给下一角色处理
if(reqStr.equals("HanderFirst")){
System.out.println("---Hander1 doHander()---");
return;
}else{
//不是自己的责任,责任推给下家
System.out.println("Hander1 pass --> next");
nowHander.doHander(reqStr);
}
}
}
/**
* 具体处理角色
* @author mlxs
*
*/
public class HanderSecond extends Hander { @Override
public void doHander(String reqStr) {
//得到当前处理角色
Hander nowHander = getHander();
//判断:如果是自己的责任,则处理,处理完后结束(return);否则,传给下一角色处理
if(reqStr.equals("HanderSecond")){
System.out.println("---Hander2 doHander()---");
return;
}else{
//不是自己的责任,责任推给下家
System.out.println("Hander2 pass --> next");
nowHander.doHander(reqStr);
}
}
}
/**
* 具体处理角色
* @author mlxs
*
*/
public class HanderLast extends Hander { @Override
public void doHander(String reqStr) {
//如果前面的都没处理,最后一家处理
System.out.println("...\n---HanderLast doHander()---");
} }
3.编写客户端请求类:Main
public class Main {
public static void main(String[] args) {
//创建3个具体处理者
Hander hander1 = new HanderFirst();
Hander hander2 = new HanderSecond();
Hander hander3 = new HanderLast();
//3个处理者链接,形成责任链
hander1.setHander(hander2);
hander2.setHander(hander3);
//从hander1开始处理请求
// hander1.doHander("HanderFirst");
// hander1.doHander("HanderSecond");
hander1.doHander("hahahahh");
}
}
4.运行,查看结果
Hander1 pass --> next
Hander2 pass --> next
...
---HanderLast doHander()---
过滤器和拦截器,就是通过这种模式思想写的,,,
chainOfResponsibility责任链模式的更多相关文章
- 十四、ChainOfResponsibility 责任链模式
设计: 代码清单: Trouble: public class Trouble { private int number; public Trouble(int number){ this.numbe ...
- Java设计模式---ChainOfResponsibility责任链模式
参考于 : 大话设计模式 马士兵设计模式视频 代码参考于马士兵设计模式视频 写在开头:职责链模式:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系 图来自大话设计模式,下面我的代 ...
- 学习笔记——责任链模式ChainOfResponsibility
责任链模式,主要是通过自己记录一个后继者来判断当前的处理情况.Handler中,再增加一个方法用于设置后继对象,如SetHandler(Handler obj). 然后Handler类以其子类的处理方 ...
- 责任链模式(chainOfResponsibility)
参考文章:http://wiki.jikexueyuan.com/project/design-pattern-behavior/chain-four.html 定义: 使多个对象都有机会处理请求,从 ...
- C#设计模式-责任链模式
在现实生活中,有很多请求并不是一个人说了就算的,例如面试时的工资,低于1万的薪水可能技术经理就可以决定了,但是1万~1万5的薪水可能技术经理就没这个权利批准,可能就需要请求技术总监的批准,所以在面试的 ...
- C#设计模式(21)——责任链模式
一.引言 在现实生活中,有很多请求并不是一个人说了就算的,例如面试时的工资,低于1万的薪水可能技术经理就可以决定了,但是1万~1万5的薪水可能技术经理就没这个权利批准,可能就需要请求技术总监的批准,所 ...
- 二十四种设计模式:责任链模式(Chain of Responsibility Pattern)
责任链模式(Chain of Responsibility Pattern) 介绍为解除请求的发送者和接收者之间耦合,而使多个对象都有机会处理这个请求.将这些对象连成一条链,并沿着这条链传递该请求,直 ...
- 24种设计模式--责任链模式【Chain ofResponsibility Pattern】
中国古代对妇女制定了“三从四德”的道德规范,“三从”是指“未嫁从父.既嫁从夫.夫死从子”,也就是说一个女性,在没有结婚的时候要听从于父亲,结了婚后听从于丈夫,丈夫死了还要听儿子的,举个例子来说,一个女 ...
- 乐在其中设计模式(C#) - 责任链模式(Chain of Responsibility Pattern)
原文:乐在其中设计模式(C#) - 责任链模式(Chain of Responsibility Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 责任链模式(Chain of R ...
随机推荐
- android 学习随笔十(网络:get、post提交数据)
1.get public class Tools { public static String getTextFromStream(InputStream is){ byte[] b = new by ...
- js正则函数match、exec、test、search、replace、split使用介绍集合
match 方法 使用正则表达式模式对字符串执行查找,并将包含查找的结果作为数组返回. stringObj.match(rgExp) 参数 stringObj 必选项.对其进行查找的 String 对 ...
- django中request对象详解(转载)
django中的request对象详解 Request 我们知道当URLconf文件匹配到用户输入的路径后,会调用对应的view函数,并将 HttpRequest对象 作为第一个参数传入该函数. ...
- 161208、Java enum 枚举还可以这么用
在大部分编程语言中,枚举类型都会是一种常用而又必不可少的数据类型,Java中当然也不会例外.然而,Java中的Enum枚举类型却有着许多你意想不到的用法,下面让我们一起来看看. 先来看一段代码示例: ...
- 160908、前端开发框架Semantic UI
简介 网页开发中,CSS控制网页样式.作为测试开发工程师,我个人不太擅长手写CSS.样式微调.兼容浏览器等工作,所以我选择使用成熟的前端框架,可以快速开发出样式美观的网站,也解决了大部分浏览器兼容问题 ...
- Error: 16GU盘变1G,恢复
最近装win10,chromium os之后,删除U盘中的文件,发现不能删除,脑子一热格式化了,发现16G突然变成了1G,这不是坑爹吗,刚买的新U盘呀.立马百度,发现有说是买的被骗了,有的说使用某个软 ...
- Linux/Unix中的#!和!#
是不是在Terminal输入命令的时候,输入了很长的一个路径,然后发现还有在同一条命令中再输一次的时候很恼火,其实Shell是提供了trick的,就是使用!#(和#!不同哦) 习惯写脚本的猿,通常对于 ...
- js对select动态添加和删除OPTION
<select id="ddlResourceType" onchange="getvalue(this)"> </select> 动态 ...
- wordpress网站被挂马以及防御方法
wordpress本身的安全性是非常的高的,一般不会被轻易的破解,被挂马,但是我们也不能够过度迷信wordpress的安全性,凡是连接上互联网的服务器和电脑,都存在被破解的风险性.所以我们在日常维护自 ...
- java 面试每日一题2
题目:输入一行字符,分别统计出其中英文字母.空格.数字和其它字符的个数. 注:如果想单独输出中文的个数和中文符号的个数,只需把isChinese()中的if语句修改 知识补充: java不像C中拥有s ...