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 ...
随机推荐
- linux内核参数优化
net.ipv4.ip_forward = 0net.ipv4.conf.default.rp_filter = 1net.ipv4.conf.default.accept_source_route ...
- rsync 远程数据同步工具详解
rysnc 命令用法:(OPTION-参数,USER-用户,HOST-IP地址,SRC-复制源位置,DEST-复制目标位置)Shell拉:rsync [OPTION] [USER@]HOST:SRC ...
- html5 canvas 笔记三(绘制文本和图片)
绘制文本 fillText(text, x, y [, maxWidth]) 在指定的(x,y)位置填充指定的文本,绘制的最大宽度是可选的. strokeText(text, x, y [, ma ...
- javascript,jquery代码规范
jquery代码规范 Coding Standards & Best Practices 中文翻译版:jquery编程的标准写法和最佳实践 javascript代码规范 JavaScript编 ...
- Extended Data Type Properties [AX 2012]
Extended Data Type Properties [AX 2012] This topic has not yet been rated - Rate this topic Updated: ...
- Oracle PL/SQL之LOOP循环控制语句
在PL/SQL中可以使用LOOP语句对数据进行循环处理,利用该语句可以循环执行指定的语句序列.常用的LOOP循环语句包含3种形式:基本的LOOP.WHILE...LOOP和FOR...LOOP. LO ...
- js 字符串比较
<script type="text/javascript"> function test(){ //1)纯数字之间比较 //alert(1<3);//true ...
- Codeforces Gym 101142C:CodeCoder vs TopForces(搜索)
http://codeforces.com/gym/101142/attachments 题意:每个人在TC和CF上分别有两个排名,如果有一个人在任意一个网站上大于另一个人的排名,那么这个人可以打败另 ...
- linux新内核的时钟机制代码
http://blog.chinaunix.net/uid-22810130-id-384173.html 如果说cfs是linux的一个很有创意的机制的话,那么linux中另一个创意就是nohz,我 ...
- Network 分类: POJ 图论 2015-07-27 17:18 17人阅读 评论(0) 收藏
Network Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 14721 Accepted: 5777 Special Judg ...