责任链模式

优点

  • 多个对象可以处理同一个请求,
  • 可以向多个对象中的一个提交一个请求

    应用场景:

  • 需要动态处理一组请求,rxjava中的请求处理,向下传递

    栗子

/**
 * Created by wangzhicheng on 2017/2/7.
 */
public class main {
    AbstractHandler handle1=new Handle1();
    AbstractHandler handle2=new Handle2();
    handle1.nextHandler=handle2;
    handle1.handRequest(new Request1("request1"));   //从责任链的起始位置开始向下传递
    handle1.handRequest(new Request2("request2"));
}

public abstract class AbstractHandler{    //请求处理抽象类
    public AbstractHandler nextHandler;
    public final void handRequest(AbstractRequest request){
        if (gethandleLevel()==request.getRequestLevel()){
            handle(request);
        }else if (nextHandler!=null){
            nextHandler.handle(request);
        }else {
            // no one could handle this request
        }
    }
    protected abstract int gethandleLevel();
    protected abstract void handle(AbstractRequest request);
}

public abstract class AbstractRequest{      //请求抽象类
    private Object object;
    public AbstractRequest(Object o){this.object=o;}
    public Object getContent(){return object;}
    public abstract int getRequestLevel();
}
public class Request1 extends AbstractRequest{
    public Request1(Object o) {
        super(o);
    }

    @Override
    public int getRequestLevel() {
        return 1;
    }
}
public class Request2 extends AbstractRequest{
    public Request2(Object o) {
        super(o);
    }

    @Override
    public int getRequestLevel() {
        return 2;
    }
}

class Handle1 extends AbstractHandler{
    @Override
    protected int gethandleLevel() {
        return 1;
    }

    @Override
    protected void handle(AbstractRequest request) {

    }
}
class Handle2 extends AbstractHandler{
    @Override
    protected int gethandleLevel() {
        return 2;
    }

    @Override
    protected void handle(AbstractRequest request) {

    }
}