当前位置: 移动技术网 > IT编程>开发语言>Java > 浅谈JAVA工作流的优雅实现方式

浅谈JAVA工作流的优雅实现方式

2019年07月19日  | 移动技术网IT编程  | 我要评论
今天查找线上问题,看到一个让我脑洞大开的工作流实现方式。以前用过责任链模式,也用过模板模式实现类工作流的方式,但是对比这个工具,逊色不少,不卖关子了,就是apache co

今天查找线上问题,看到一个让我脑洞大开的工作流实现方式。以前用过责任链模式,也用过模板模式实现类工作流的方式,但是对比这个工具,逊色不少,不卖关子了,就是apache commons chain,它是command模式与责任链模式的综合体。

1、apache commons chain 中的角色有:chain、context、command。

2、在我们订单系统有这样的业务,就是退票的时候,会根据核损后的订单价格,给客人退钱,但是订单的金额,由几部分组成

有现金、商旅卡、有优惠券。所以根据需求,我们需要一个工作流来走下退款流程,我们的流程流转的步骤是这样的:

先退商旅卡-----如果还有余额退现金-----------还有余额再退优惠券,分析一下这样的需求,刚好可以用这个工具,直接上代码了

先引入包

 <dependency>
      <groupid>commons-chain</groupid>
      <artifactid>commons-chain</artifactid>
      <version>1.2</version>
    </dependency>

编写command

/**
 * 退商旅卡cash
 * created by 一代天骄 on 2018/7/1.
 */
@slf4j
public class refundbusinesscardcommand implements command{
  public boolean execute(context context) throws exception {
    refundcontext refundcontext = (refundcontext) context;
    log.info("orderid:{} 退款开始,第一步:退商旅卡,金额:{}",refundcontext.getorderid(),"10");
    return false;
  }
}

/**
 * 退现金
 * created by 一代天骄 on 2018/7/1.
 */
@slf4j
public class refundcashcommand implements command {
 
  public boolean execute(context context) throws exception {
    refundcontext refundcontext = (refundcontext) context;
    log.info("orderid:{}退款开始,第二步:退现金,金额:{}",refundcontext.getorderid(),"5");
    return false;
  }
}

/**
 * 退优惠券
 * created by 一代天骄 on 2018/7/1.
 */
@slf4j
public class refundpromotioncommand implements command{
 
 
  public boolean execute(context context) throws exception {
    refundcontext refundcontext = (refundcontext) context;
    log.info("orderid:{} 退款开始,第二步:退优惠券,金额:{}",refundcontext.getorderid(),"20");
    return false;
  }
}
/**
 * created by 一代天骄 on 2018/7/1.
 */
@data
public class refundcontext extends contextbase {
 
  /**
   * 订单号
   */
  private integer orderid;
 
 
}
/**
 *
 * 退票的工作流实现
 * created by 一代天骄 on 2018/7/1.
 */
public class refundticketchain extends chainbase {
 
  public void init() {
    //退商旅卡
    this.addcommand(new refundbusinesscardcommand());
    //退现金
    this.addcommand(new refundcashcommand());
    //退优惠券
    this.addcommand(new refundpromotioncommand());
  }
 
 
  public static void main(string[] args) throws exception {
    refundticketchain refundticketchain = new refundticketchain();
    refundticketchain.init();
    refundcontext context = new refundcontext();
    context.setorderid(1621940242);
    refundticketchain.execute(context);
  }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持移动技术网。

如您对本文有疑问或者有任何想说的,请 点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网