PlantUML 绘制时序图
https://blog.csdn.net/zhangwei_david/article/details/125451459 PlantUML绘制类图
https://blog.csdn.net/zhangwei_david/article/details/125477021
目录
活动图是常用的动态视图,是用来描述在具体场景下如何做特定的事情;通过可视化的工具,描绘现实生活中具体事物运转流程,输出让人更直观理解,便于沟通的内容。
一般活动图包含一下几个部分
下面就是一副以在充值APP上进行一次手机充值的活动图

| 说明 | 语法 |
| 开始 | start |
| 结束 | end |
| 停止 | stop |
| 杀死活动 | kill |
| 摆脱活动 | detach |
- !pragma useVerticalIf on
- start
- if(条件A) then(yes)
- :条件A操作;
- detach
- elseif(条件B) then(yes)
- :条件B操作;
- kill
- else(default)
- : 默认操作;
- endif
- stop
效果图:

普通活动最简单几本语法就是
:活动说明;
条件选择主要就是ifelse和switch
条件判断的语法格式是 if(...) then(...) elseif(...) else endif.
上文中的示例图就是基于ifelse条件选择
switch的语法格式如下:
- start
- switch(测试)
- case (条件A)
- :TextA;
- case (条件B)
- :TextB;
- case (条件C)
- :TextC;
- endswitch
- stop

循环主要就是while和repeat,goto还是属于实验性质,效果不佳
下面示例就是while的基本语法
- start
- while(更多数据?) is(not empty)
- :读取数据;
- :生成图片;
- endwhile(empty)
- stop

下面示例就是repeat的基本语法
- start
- repeat
- :读取数据;
- :生成图片;
- repeat while (更多数据?)
-
- stop

可以使用fork,fork again和end 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

使用 split, split 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

泳道使用“|泳道名称|”来定义泳道
对于活动的颜色可以 #颜色:行为;来改变行为颜色
#red:行为 B;
可以使用 -[#颜色,线型]-> 来改变连接线类型和颜色
如:
| 语句 | 说明 |
| -[#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