熬夜设计工作流的实现

      首先声明,有点标题党了~我熬夜做的不过是个演示程序罢了,为了应付学校项目的中期检查,演示工作流的编排和执行,仅具有“娱乐”价值,没有任何商业价值,估计也算不上“工作流”。演示用的方法调用就是简单的加法、减法和乘法。


      首先,我有一个图形化界面(借用的BPEL Designer的界面)用来绘制工作流程,如下图所示:


熬夜设计工作流的实现_第1张图片

       接着,向工作节点添加调用的方法:右键节点->添加方法;

       最后做完图后,选择工具栏的“执行”按钮,即可按绘制的流程顺序执行下来。

 

      首先说数据结构。我定义的一个工作就是图上的一个节点,节点用来实现绘制功能的数据沿用这个设计工具本来的格式。为了实现流程的执行功能,我将原先节点的前驱后继只能有一个的链表式结构改成了用List实现,这样前驱后继都可以是多个了;添加“结果”和“操作”参数,来记忆执行该工作的结果以及描述该工作的操作。

 

      然后就是算法了。开始为这问题挺头疼的,后来偶然听说了“拓扑排序”,揣摩了一下,豁然开朗(编辑器会将画板上所有的节点存入一个Map中):

     1.从Map中遍历出所有前驱为零的节点压栈;

     2.从栈中推出一个,执行该节点的操作,将结果存入“结果”参数;

     3.扫描该节点的一个后继节点,查看它的所有前驱节点的’结果“参数是否为空?不为空转步骤4,否则返回上一层扫描。

     4.执行该节点,对该节点转步骤3操作。

      (头一回像算法书上写的那样描述算法,如有不妥,请前辈指出。)

 

      经过简单的测试,对于最终汇集到一个工作中去的工作流,即截图所示的方式,该算法似乎都没问题。

 

     天亮了,是不是该趴一会了……

你可能感兴趣的:(数据结构,工作,算法)