责任型模式之Chain of Responsibility(责任链)模式

1.如果你期望能够允许一个请求沿着对象链不断向上提交,直到这个请求被某一级处理,可使用Chain of Responsibility模式
2.举例

//抽象具体者实现处理方法,如果该具体类可处理则处理,否则传递给下个对象处理
public abstract class Handler {
    private Handler successor;

    public Handler getSuccessor(){
        return successor;
    }

    public void setSuccessor(Handler successor){
        this.successor = successor;
    }

    public void handleRequest(int requestLv) {
        // TODO Auto-generated method stub
        if(requestLv==getLv()){
            System.out.println("该类可以处理请求");
        } else {
            if(getSuccessor()!=null){
                System.out.println("传递给下个对象");
                getSuccessor().handleRequest(requestLv);
            }
        }   
    }

    public abstract int getLv();
}
//第一个具体处理类
public class FirstHandler extends Handler{

    @Override
    public int getLv() {
        // TODO Auto-generated method stub
        return 1;
    }

}
//第二个具体处理类
public class SecondHandler extends Handler{

    @Override
    public int getLv() {
        // TODO Auto-generated method stub
        return 2;
    }

}
//测试类
public class Test {
    public static void main(String[] args){
        Handler fh = new FirstHandler();
        Handler sh = new SecondHandler();

        fh.setSuccessor(sh);

        //fh.handleRequest(1);
        fh.handleRequest(2);
    }
}
//结果
传递给下个对象
该类可以处理请求

3.总结:Chain of Responsibility(责任链)模式可让每个对象都有一次机会决定自己是否处理请求,以便于避免请求的发送者与其接收者之间的耦合。当应用该模式后,客户端代码不必事先知道对象集合中哪个对象可提供自己所需要的服务。当客户端代码发出调用请求之后,该请求沿着责任链转发,知道找到提供该服务的对象为止。
4.参考:http://haolloyin.blog.51cto.com/1177454/342166/

你可能感兴趣的:(设计模式)