设计模式之责任链模式
参考:
http://www.cnblogs.com/wxisme/p/4550712.html
责任链模式:将能够处理同一类请求的对象连成一条链所提交的请求沿着链传递,链上的对象逐个判断是否有能力处理该请求,
如果能则处理,如果不能则传递给链上的下一个对象。
优点:将请求者和发送者解耦
简化对象的处理过程
可以通过改变链中的成员或成员的顺序来动态的新增或则删除责任。
缺点:不能保证请求一定会执行,可能或落到责任链之外。
不容易观察运行时的特征,处理请求的方法比较分散。
package com.yun.base.design.chain; public abstract class Handler { //下一级责任链 public Handler handler; //设置下一级责任链 public void setSuccessor(Handler handler){ this.handler=handler; } public abstract void request(int request); }
package com.yun.base.design.chain; public class MyHandler1 extends Handler { @Override public void request(int request) { if(request<10){ System.out.println("我是handler1,我处理了请求:"+request); }else { this.handler.request(request); } } }
package com.yun.base.design.chain; public class MyHandler2 extends Handler { @Override public void request(int request) { if(request>10){ System.out.println("我是handler2,我处理了请求:"+request); }else { System.out.println("请求"+request+"没人能处理"); } } }
测试
package com.yun.base.design.chain; public class ResponsibilityChainTest { public static void main(String[] args) { //创建处理器 Handler handler1=new MyHandler1(); Handler handler2=new MyHandler2(); //客户端创建处理器的关联,形成链 handler1.setSuccessor(handler2); //创建任务,此处为一些数字,不同大小,处理器处理结果不同 int[] requests={4,10,59,2,16}; //调用处理器处理 for(int request:requests){ handler1.request(request); } } }