java设计模式----责任链模式
2015-12-30 16:31
507 查看
责任链模式是对象的行为模式。使多个对象都有机会处理请求,从而避免请求的发送者和接受者直接的耦合关系。将这些对象连成一条链,沿着这条链传递该请求,直到有一个对象处理它为止。责任链模式强调的是每一个对象及其对下家的引用来组成一条链,利用这种方式将发送者和接收者解耦。
责任链模式还是很好理解的,责任链模式的应用场景也很多,比如说OA系统的工作流,Struts2的拦截器(Interceptor),servlet的过滤器(Filter)
责任链主要两个角色,一个是抽象处理者角色,一个是具体处理者角色。抽象处理者定义请求方法及连接下家的对象引用。具体处理者则是判断当前请求是否符合自己处理要求,不能处理则交给下家。
这样的话,我们在测试的时候,利用抽象处理者中对象的set方法将具体对象链接起来。然后传入合适参数即可。上代码:
抽象处理对象,定义一个具体对象,设置getset方法,定义接收请求方法:
具体处理对象一:
具体处理对象二:
具体处理对象N:
测试:(将所有处理对象链接起来)
结果:
责任链模式还是很好理解的,责任链模式的应用场景也很多,比如说OA系统的工作流,Struts2的拦截器(Interceptor),servlet的过滤器(Filter)
责任链主要两个角色,一个是抽象处理者角色,一个是具体处理者角色。抽象处理者定义请求方法及连接下家的对象引用。具体处理者则是判断当前请求是否符合自己处理要求,不能处理则交给下家。
这样的话,我们在测试的时候,利用抽象处理者中对象的set方法将具体对象链接起来。然后传入合适参数即可。上代码:
抽象处理对象,定义一个具体对象,设置getset方法,定义接收请求方法:
package chain; public abstract class Handler { private Handler seccessor; public abstract void handlerQequest(String condition); public Handler getSeccessor() { return seccessor; } public void setSeccessor(Handler seccessor) { this.seccessor = seccessor; } }
具体处理对象一:
package chain; public class ConcreteHandler1 extends Handler{ @Override public void handlerQequest(String condition) { if(condition.equals("ConcreteHandler1")){ System.out.println("处理器1处理...."); }else{ System.out.println("处理器1不处理..."); //交给下一个处理器处理 getSeccessor().handlerQequest(condition); } } }
具体处理对象二:
package chain; public class ConcreteHandler2 extends Handler{ @Override public void handlerQequest(String condition) { if(condition.equals("ConcreteHandler2")){ System.out.println("处理器2处理..."); }else{ System.out.println("处理器2不处理..."); getSeccessor().handlerQequest(condition); } } }
具体处理对象N:
package chain; public class ConcreteHandlerN extends Handler{ @Override public void handlerQequest(String condition) { System.out.println("处理器N处理..."); } }
测试:(将所有处理对象链接起来)
package chain; public class Test { public static void main(String[] args) { Handler handler1 =new ConcreteHandler1(); Handler handler2=new ConcreteHandler2(); Handler handlerN=new ConcreteHandlerN(); //链起来 handler1.setSeccessor(handler2); handler2.setSeccessor(handlerN); //假设这个请求不是1、2的责任 handler1.handlerQequest("执行到最后"); } }
结果:
处理器1不处理... 处理器2不处理... 处理器N处理...
相关文章推荐
- 可能是东半球最全的RxJava使用场景小结
- spring mvc 用ajaxSubmit 在iE8上传文件变下载的问题
- SpringMVC中使用DWR
- hbase数据迁移put方法java代码
- Java中的static关键字解析
- Spring学习笔记(十四):junit4的使用
- sikuli+java实例
- Java - wait()/notify()
- MyEclipse10的一些问题(git插件,jdk7)
- SpringMVC与iReport整合开发时的PDF中文显示处理
- Java中对象的深复制(深克隆)和浅复制(浅克隆)介绍
- Java基础之集合
- Java基础之集合
- Java基础之集合
- 初学Java语法(笔记)
- Java基础之集合
- java通过ActiveMQ实现JMS的消息队列实例
- NIO--JAVA NIO 入门
- eclipse 中文注释的乱码问题解决方案 .
- Spring_手动获取Bean