Android进阶Android Studioandroid 开发程序员

设计模式之责任链模式

2017-09-06  本文已影响88人  慕涵盛华

目录

定义

责任链模式(Chain of Responsibility)是一种对象的行为模式。在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链。请求在这个链上传递,直到链上的某一个对象决定处理此请求。发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求,这使得系统可以在不影响客户端的情况下动态地重新组织和分配责任。

责任链的定义有些抽象,其实就是使多个对象都有机会处理请求,从而避免了请求的发送者和接受者之间的耦合关系,将这些对象形成一条链,并沿着这条链传递该请求,直到有对象处理它为止。就像我们上学时在班级上传递小纸条一样,一个同学传递给另一个同学,如果是传给该同学的那么该同学接受,传递终止,否则传递给下一个同学。在这其中一个一个的同学组成一条链,在这条链上的每个同学都有可能接收纸条(处理请求),如果一个同学要传递给下一个同学就要知道同学的名字(引用)。

使用场景

代码运用

public abstract class Handler {
  public Handler nextHandler;
  public  void handleRequest(Request request){
    if(getHandleLevel()==request.getRequestLevel())
    {
        handle(request);
    }else {
        if(nextHandler!=null)
        {
            nextHandler.handleRequest(request);
        }else {
            System.out.println("---->  所有的处理对象都不能处理它");
        }
        
    }
  }
  /**
   * 每个处理者的对象的具体处理方式
   * @param Request
   */
  public abstract void handle(Request request);
  /**
   * 每个处着对象处理的级别
  * @return
   */
  public abstract int getHandleLevel();
}

//请求的抽象封装类
public abstract class Request {
  private Object object;

  public Request(Object object){
    this.object=object;
  }
  /**
   * 具体的内容对象
   * @return
   */
  public Object getContent(){
    return object;
  }
    /**
     * 获取请求级别
     */
   public abstract int getRequestLevel();
}
public class ConcreteHandler extends Handler{

  @Override
  public void handle(Request request) {
      System.out.println("----handle1  处理请求: "+request.getRequestLevel());
  }

  @Override
  public int getHandleLevel() {
    return 1;
  }
}

首先由handler1处理请求,如果请求不是给它的,就会传递下一个(handler2)因为handler1有handler2的引用( handler1.nextHandler=handler2)。

关注微信公众号获取更多相关资源

Android小先生
上一篇下一篇

猜你喜欢

热点阅读