责任链模式

2017-02-27  本文已影响19人  明朗__

使多个对象都有机会处理请求,从而避免了请求的发送者和接受者之间的耦合关系,
将这些对象形成一条链,并沿着这条链传递该请求,直到有对象处理它为止

  1. 抽象处理者
public  abstract class Handler {
  //持有下一个处理者的引用这是很关键的
    public Handler nextHandler;
    public void handleRequest(AbstractRequest abstractRequest){
        if(getHandleLeve()==abstractRequest.getRequestLeve()){
            handle(abstractRequest);
        }else {
            if(null!=nextHandler){
                nextHandler.handleRequest(abstractRequest);
            }else {
                System.out.print("链式调用结束");
            }
        }
    }

    /**
     * 每个对象的处理方式
     * @param abstractRequest
     */
     public abstract void handle(AbstractRequest abstractRequest);

    /**
     * 每个对象的处理级别
     * @return
     */
     public abstract int getHandleLeve();
}
  1. 具体的处理者(Handler1 ,Handler2,Handler3 雷同)
public class Handler1 extends Handler {
    /**
     * 处理请求
     * @param abstractRequest
     */
    @Override
    public void handle(AbstractRequest abstractRequest) {
            System.out.print("Handler1---处理:"+abstractRequest.getContent());
    }

    @Override
    public int getHandleLeve() {
        return 1;
    }
}
  1. 抽象的请求者
public abstract class AbstractRequest {
    private Object object;

    public AbstractRequest(Object object) {
        this.object=object;
    }

    /**
     * 具体的对象内容
     * @return
     */
    public Object getContent(){
        return object;
    }

    /**
     * 获取的请求级别
     * @return
     */
    public abstract  int getRequestLeve();
}
  1. 具体的请求者(Request1,Request2,Request3雷同)
public class Request1 extends AbstractRequest {

    public Request1(Object object) {
        super(object);
    }

    @Override
    public int getRequestLeve() {
        return 1;
    }
}
  1. 客户端调用
        Handler1 handler1=new Handler1();
        Handler2 handler2=new Handler2();
        Handler3 handler3=new Handler3();
        handler1.nextHandler=handler2;//上一个处理者持有下一个处理者的引用 是现成链式调用的必要条件
        handler2.nextHandler=handler3;
       
        Request3 request3=new Request3("请求3");
        handler1.handleRequest(request3);

6.结果

Handler3---处理:请求3
Process finished with exit code 0
上一篇下一篇

猜你喜欢

热点阅读