工作流模式

工作流模式是由W.M.P. van der Aalst、A.H.M. ter Hofstede、Bartosz Kiepuszewski、A. P. Barros等人于2000年提出的一个概念。他们一共总结了21种工作流模式。

簡介
1. 顺序（Sequence） 
工作流中的各个活动在同一个进程中按顺序依次执行。 
例子：在“发送货物”之后“发送单据”。 

2. 平行拆分（Parallel Split） 
工作流中从一个线程中的一个点拆分为在多个线程中平行执行的多个活动。 
例子：活动“付款”激活了“发送货物”以及“通知顾客”的执行。 

3. 同步（Synchronization） 
工作流中的多个活动在一个点上汇合成一个线程。 
例子：活动“归档”在“发票”和“收款”全部完成后被激活。 

4. 排他选择（Exclusive Choice） 
工作流中的一个点，基于决定或者工作流中的数据，流向若干个分支中的一个。 

5. 单合并（Single Merge） 
工作流程中的一个点在两个或者多个分支发生非同步的汇合时执行。它假设这些分支中不存在平行执行的情况。 
例子：在收到支付或者确认信用之后，汽车被交付给顾客。 

6. 多选（Multi-choice） 
工作流中的一个点，基于决定或者工作流中的数据，流向若干个分支中的几个。 

7. 平行合并（Synchronize Merge） 
工作流程中的多个路径在一个点被汇合成一个单一的进程。如果多于一个的路径到达了，活动线程就需要进行同步。如果只有一个路径到达，那么其它的路径应该非同步的重新会聚。该模式假设在一个分支被激活后，不会在等待其它分支完成的过程中再次被激活。 
这种模式的难点在于决定在哪些分支到达后启动活动。 

8. 多合并（Multi-merge） 
工作流程中的多个分支在一个点进行非同步的汇聚。如果多于一个的分支被激活——可能是并发的——每个进入分支的每个活动都在合并之后启动新的活动。 

9. 鉴别器（Discriminator） 
鉴别器是工作流中的一个点，它等待进入分支中的一个完成，然后才激活其后的活动序列。从那个时刻开始，它等待所有剩余的分支完成，并且“忽略”它们。一旦所有的分支都已被触发，它就会重置自己，以便能被再次触发。 
例子：在三个分支中的任意两个到达之后启动后面的活动。

10. M中的N模式（N-out-of-M Join）
合并多条路径，进行部分同步，只执行一次后续活动 

11. 强制循环（Arbitrary Cycles） 
工作流中的一个点可以让一个或多个活动反复的执行。 

12. 隐式终止（Implicit Termination） 
一个子过程应该在没有什么事情可做的时候被停下来。换句话说，在工作流中没有别的活动在执行并且没有活动可被激活的时候终止。 

13. 非同步的多实例（Multiple Instances Without Synchronization） 
在一个工作流的内部中，可以创建一个活动的多个实例，当然，这需要对新产生的线程的控制能力。 

14. 在设计期间预先确定的多实例（Multiple Instances With a Priori Design Time Knowledge） 
在特定过程中的特定活动的数量是在设计时就被确定的。一旦所有的实例都完成了，其它的活动应该被启动。 
例子：有关危险品的请求需要三个不同的审核。 

15. 在运行期预先确定的多实例（Multiple Instances With a Priori Runtime Knowledge） 
在一个活动能够被多次激活的这种情况下，在指定情况下的指定活动的实例数量可能取决于情况的特性或者资源的可用性。但是，在活动被创建之前，在运行中的某个阶段，这个数量是可以预知的。一旦所有的实例都完成了，其它的活动应该被启动。 
例子：在预定旅行的过程中，如果旅途包含多个飞行的话，活动“预定机票”会被多次执行。如果所有预定都完成了，发票会被发送给客户。 

16. 无法在运行期预先确定的多实例（Multiple Instances With no Priori Runtime Knowledge） 
在一个活动能够被多次激活的这种情况下，在指定情况下的指定活动的实例数量无论是在设计时或者运行时都不能在活动的实例被创建之前预先确定。但是，在活动被创建之前，在运行中的某个阶段，这个数量是可以预知的。一旦所有的实例都完成了，其它的活动应该被启动。这个模式和模式14的区别在于，在某些实例运行结束之后，新的实例仍能被创建。 

17. 延迟选择（Deferred Choice） 
工作流中的一个点，有一个或多个分支已经被选择。与XOR拆分相比，并没有明确的选择，但是，选择是取决于环境的。与AND拆分相比，两者中只有一个被执行。这意味着一旦环境启动了其中的一个，另一个就被取消。要注意，选择是被延迟到两个分支中的一个真正开始执行时，也就是说，选择是可以尽可能的推后的。 
例子：在收到货物之后，有两种方法可以将其送到。选择取决于相关资源的可用性。因此，选择会被推迟到直到其中一个资源可用为止。 

18. 交替平行路由（Interleaved Parallel Routing） 
一组活动以任意的顺序执行，每个活动都被执行，他们的顺序是在运行时决定的，并且在任意一个时刻都不会有两个活动在执行。 

19. 里程碑（Milestone） 
一个活动能否执行取决于一个指定的状态。也就是说，只有在到达一个特定的未过期的里程碑时，活动才被执行。 
例子：一个顾客只有在进行六个月以上的飞行之后才能声明自己的飞行里程。 

20. 取消活动（Cancel Activity） 
一个可执行的活动被强制失效了，也就是说，一个正在等待执行的活动所在线程被移除了。 
例子：如果顾客取消了一个请求，那么与之相关的活动也被取消了。 

21. 取消实例（Cancel Case） 
一个活动的实例被完全消除了。

外部链接
工作流模式网站（英文）
工作流模式简介 

工作流