责任链设计模式(Chain of Responsibility Pattern)-七三

简单介绍

举个栗子,还是拿支付系统来说。用户下了一个订单,那么我们需要处理用户是否使用了优惠券、活动等等

我们把订单处理的整个流程用链表的形式穿插起来,就可以形成一个责任链的形式。

当一个用户下了订单,并使用了优惠券但没有使用活动,在责任链处理中,发现用户没有参加活动,则不进行处理继续调用责任链下一步处理,遇到优惠券Handler的时候,则对其进行操作。

责任链设计模式(Chain of Responsibility Pattern)-七三_第1张图片

代码实现

public interface BaseHandler{
  void doSomething(String input,BaseHandler baseHandler);
}

public class ChainHandler implements BaseHandler{
  // 责任链全部调度任务
  private List handlers = new ArrayList<>();
  // 责任链下标
  private int index;
  
  public ChainHandler addHandler(BaseHandler baseHandler){
    handlers.add(baseHandler);
    return this;
  }
  
  public void doSomething(String input,BaseHandler baseHandler){
    // 若下标行至数组底部,则不执行
    if(index==handlers.size()) return;
    // 取出任务
    BaseHandler handle = handlers.get(index);
    // 下标向下滑动
    index ++;
    handler.doSomething(input,this);
  }
}

public class CouponHandler{
  @Override
  public void doSomething(String input,BaseHandler baseHandler){
    if("优惠券".equals(input)){
      System.out.println("优惠券");
      // 若是只想在链中只让一个去处理则在处理的链中retur掉
      // return; 停止链的调用
    }
    baseHadler.doSomething(input,baseHandler);
  }
}
public class ActivityHandler{
  @Override
  public void doSomethig(String input,BaseHanndler baseHandler){
    if("活动".equals(input)){
      System.out.println("活动");
    }
    baseHandler.doSomething(input,BaseHandler);
  }
}

public class Test{
  public static void main(String args[]){
    //创建责任链
    ChainHandler chainHandler = new ChainHandler();
    //给责任链添加任务
    chainHandler.addHandler(new CouponHandler())
      				.addHandler(new ActivityHandler());
    //调用责任链
    chainHandler.doSomething("优惠券",chainHandler);
  }
}

小结

可能有些人还没有理解这个责任链,不妨先自己用代码写写看。也许多写两边就能明白这个是什么意思啦

じゃあ、まだ今度会いましょう〜

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