Skip to content

一般活动图包含一下几个部分

  1. 起点
  2. 活动
  3. 判断
  4. 泳道
  5. 执行顺序
  6. 结束

2.1 活动图示例

下面就是一副以在充值 APP 上进行一次手机充值的活动图

三、如何使用 PlantUML 绘制时序图

3.1 开始 / 停止 / 结束 /

说明语法
开始start
结束end
停止stop
杀死活动kill
摆脱活动detach

3.1.1 示例代码

!pragma useVerticalIf on
start
  if(条件A) then(yes)
   :条件A操作;
   detach
  elseif(条件B) then(yes)
   :条件B操作;
   kill
  else(default)
    : 默认操作;
  endif
stop

效果图:

3.2 普通活动

普通活动最简单几本语法就是

: 活动说明;

3.3 条件选择

条件选择主要就是 ifelse 和 switch

3.3.1 if/else

条件判断的语法格式是 if(...) then(...) elseif(...) else endif.

上文中的示例图就是基于 ifelse 条件选择

3.3.3 switch

switch 的语法格式如下:

start
switch(测试)
case (条件A)
:TextA;
case (条件B)
:TextB;
case (条件C)
:TextC;
endswitch
stop

3.4 循环

循环主要就是 while 和 repeat,goto 还是属于实验性质,效果不佳

3.4.1 while

下面示例就是 while 的基本语法

 start
    while(更多数据?) is(not empty)
     :读取数据;
     :生成图片;
     endwhile(empty)
    stop

3.4.2 repeat

下面示例就是 repeat 的基本语法

start
repeat
  :读取数据;
  :生成图片;
repeat while (更多数据?)
 
stop

3.5 并行与分割

3.5.1 并行

可以使用forkfork againend fork 或者 end merge 等关键字表示并行处理。

首先看看简单的并行处理(fork .... fork again.... end fork)

start
fork
  :行为 A;
fork again
  :行为 B;
end fork {或}
stop

在看看合并以及结束子行为是如何处理的。

start
fork
  :行为 A;
fork again
  :行为 B;
  end
fork again
 :行为 C;
 detach
fork again
 :行为 D;
 stop
fork again
 :行为 E;
 kill
fork again
 :行为 F;
end merge
stop

3.5.2 分割

使用 splitsplit again 和 end split 关键字去表达分割处理,下文通过使用 split 来处理多输入和多输出。

'多输入'
split
-[hidden]->
 :行为 A;
split again
-[hidden]->
 :行为 B;
end split
 -[#green,dashed]->
:处理分发;
split
-[#blue]->
 :行为 A;
 kill
split again
 #red:行为 B;
 detach
split again
 end
split again
stop
end split

3.6 泳道

泳道使用 “| 泳道名称 |” 来定义泳道

3.7 样式与颜色

3.7.1  改变活动颜色

对于活动的颜色可以 #颜色: 行为; 来改变行为颜色

#red: 行为 B;

3.7.2 改变连接线颜色

可以使用 -[# 颜色, 线型]-> 来改变连接线类型和颜色

如:

语句说明
-[#red,dashed]->红色虚线
 -[#blue,dotted]->蓝色点状线
-[#red]->红色实线

3.7.3 改变泳道颜色

|#lightYellow | 用户 |

四、综合运用

下一就是文章开头活动图的代码

@startuml
|#lightYellow|用户|
start
:输入手机号;
:选择话费套餐;
|#lightBlue|充值APP|
:生成,提交订单;
|#lightgray|服务商|
:生成订单;
|充值APP|
:展示支付方式;
|用户|
:选择支付方式;
:支付套餐金额;
|服务商|
:支付结果通知;
split
:更新订单状态;
|充值APP|
:展示支付结果;
|用户|
:获取支付结果;
kill
split again
 |服务商|
  -[dashed]->
 if(支付成功) then(成功)
 :向运营商发起充值请求;
 |#pink|运营商|
 :接收到充值请求;
 :执行充值;
 :通知充值结果;
 |服务商|
 :更新订单状态;
 |充值APP|
 :展示充值结果;
 |用户|
 :获取充值结果;
 floating note left #red:充值流程结束
  end
 else(失败)
 |服务商|
 :失败处理流程;
 kill
 
@enduml

Released under the MIT License.