必威体育Betway必威体育官网
当前位置:首页 > IT技术

JAVA工作流的优雅实现方式

时间:2019-10-16 07:45:39来源:IT技术作者:seo实验室小编阅读:69次「手机版」
 

java工作流

今天查找线上问题,看到一个让我脑洞大开的工作流实现方式。以前用过责任链模式,也用过模板模式实现类工作流的方式,但是对比这个工具,逊色不少,不卖关子了,就是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);
    }
}

相关阅读

十大经典排序算法总结(Java语言实现)

最近在看排序算法,对此做个总结。参考文章:https://www.cnblogs.com/onepixel/articles/7674659.htmlhttps://www.cnblogs.com/guoy

C#操作xml文件:使用XmlDocument 实现读取和写入

XML文件是一种常用的文件格式,例如WinForm里面的app.config以及Web程序中的web.config文件,还有许多重要的场所都有它的身影。Xml是

最简单易懂的24点解法(Java实现)

问题描述:给出4个[0,13]的数值,经过任意加减乘除后得到24.思路: 假设四个数为a1,a2,a3,a4,其中四个符号为t1,t2,t3,t4。 我们先计算

Android实现一个简单的SQLite数据库的增删改查

Android实现一个简单的SQLite数据库的增删改查 SQLite是一个轻量级的嵌入式数据库引擎,它支持SQL语言,并且占用很少的内存就

Base64 的原理、实现及应用

一、Base64编码原理 Base64编码是基于64个字符A-Z,a-z,0-9,+,/的编码方式,因为2的6次方正好为64,所以就用6bit就可以表示出64个字符,eg:

分享到:

栏目导航

推荐阅读

热门阅读