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

  1. 打印Java数组最优雅的方式

    在逛 Stack Overflow 的时候,发现了一些访问量像‎安第斯山一样高的问题,比如说这个:打印 Java 数组最优雅的方式是什么?访问量足足有 220W+,想不到啊,这么简单的问题竟然有这么多 ...

  2. 用什么方式学java_五分钟学Java:打印Java数组最优雅的方式是什么?

    在逛 Stack Overflow 的时候,发现了一些访问量像‎安第斯山一样高的问题,比如说这个:打印 Java 数组最优雅的方式是什么?访问量足足有 220W+,想不到啊,这么简单的问题竟然有这么多 ...

  3. java 数组拼接_打印Java数组最优雅的方式是什么?这波操作闪瞎我

    在 Java 中,数组虽然是一个对象,但并未明确的定义这样一个类,因此也就没有覆盖 toString() 方法的机会.如果尝试直接打印数组的话,输出的结果并不是我们预期的结果.那有没有一些简单可行的方 ...

  4. Java工作流引擎节点接收人设置“其他方式总结”系列讲解

    关键字: 驰骋工作流程快速开发平台 工作流程管理系统 工作流引擎 asp.net工作流引擎 java工作流引擎. 开发者表单  拖拽式表单 工作流系统CCBPM节点访问规则接收人规则 适配数据库: o ...

  5. android 退出应用没有走ondestory方法,Android退出应用最优雅的方式(改进版)

    我们先来看看几种常见的退出方法(不优雅的方式) 一.容器式 建立一个全局容器,把所有的Activity存储起来,退出时循环遍历finish所有Activity import java.util.Arr ...

  6. 转: Springboot — 用更优雅的方式发HTTP请求(RestTemplate详解)

    转自: Springboot - 用更优雅的方式发HTTP请求(RestTemplate详解) - Java知音号 - 博客园RestTemplate是Spring提供的用于访问Rest服务的客户端, ...

  7. Springboot — 用更优雅的方式发HTTP请求(RestTemplate详解)

    RestTemplate是Spring提供的用于访问Rest服务的客户端,RestTemplate提供了多种便捷访问远程Http服务的方法,能够大大提高客户端的编写效率. 我之前的HTTP开发是用ap ...

  8. Java操作Excel三种方式POI、Hutool、EasyExcel

    Java操作Excel三种方式POI.Hutool.EasyExcel 1. Java操作Excel概述 1.1 Excel需求概述 1.2 Excel操作三种方式对比 2. ApachePOIExc ...

  9. (End)从.net到java,工作流平台的延展

    2022年6月6日,我们进入了java工作流平台的第3个年头,在这三年里,平台完成了上100万次的业务审批验证,经历了从能运行-->可使用--->基本能用--->全业务能力---&g ...

  10. java工作流 表设计_Java工作流系统jflow从表功能介绍一

    关键词:工作流快速开发平台  工作流流设计  业务流程管理   asp.net 开源工作流  bpm工作流系统  java工作流主流框架  自定义工作流引擎 表单设计器  流程设计器 从表也叫明细表, ...

最新文章

  1. Linux中关于 su 和 su - 的区别
  2. Windows 7操作系统使用移动硬盘快速安装
  3. 点游出行提供内地与香港游客高质量的旅程
  4. 如何阻止复制剪切和粘贴事件
  5. ubuntu 命令行torrent种子下载
  6. Android系统的手表adb抓取log日志
  7. 逍遥android模拟器设置,逍遥安卓模拟器最佳设置电脑上玩手游流畅不卡多开更好用...
  8. 深度学习笔记--激活函数:sigmoid,maxout
  9. Linux实战教学笔记29:MySQL数据库企业级应用实践
  10. gerber文件怎么导贴片坐标_怎么用CAM350从Gerber中提取SMT元件贴片坐标-CAM350教程...
  11. 迅雷下载的种子文件后坠总是php,我的迅雷怎么不能下载呀,总是显示在连接种子文件...
  12. 怎么 把计算机里的照片变成背景,用画图怎么改照片底色
  13. java.io.IOException: Unable to read entire header; 275 bytes read; expected 512 bytes
  14. 骚操作!那些富有感情的影视台词截图都是哪来的?
  15. 捕获iOS模拟器视频以进行App预览
  16. 百度seo指南_白杨SEO:如何让网页被百度收录以及提高它的排序?
  17. Linux IO体系、零拷贝和虚拟内存关系的重新思考
  18. 神经管理学告诉你:学了管理学就能运筹帷幄吗?
  19. 查看计算机内存过高,物理内存过高怎么办,教您电脑物理内存过高怎么办
  20. Lenovo YOGA 14s(不只适合这一款机型)重装系统后触控板失灵 + 解决方法 )

热门文章

  1. C4D插件X-Particles粒子特效(一)
  2. 谷歌浏览器播放视频只有声音没有画面(或者只有画面没有声音)解决方法
  3. myeclipse下载_资源共享:常用的编程软件下载链接分享
  4. GO分析(cytoscape)
  5. linux卸载bzip2,bzip2命令_Linux bzip2命令:压缩和解压文件(.bz2文件)
  6. Windows server 2019的系统激活码 激活windows server 2012r2系统
  7. C语言编程学习的经验
  8. Cannot create file C:\Users\Administrator\AppData\Local\Temp\EditorLineEnds.ttr
  9. matlab中进行多行注释
  10. 最小二乘支持向量机(LSSVM)学习记录