首页 > 代码库 > 设计模式之责任链模式

设计模式之责任链模式

参考:

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);
        }
    }
    
}

 

设计模式之责任链模式