PlantUML 活动图实战:从分叉到并发
活动图经常被忽略 —— 比流程图更像流程图。这篇覆盖从基本语法到分叉 / 合并 / 异常处理。
活动图 vs 流程图
| 维度 | 流程图 | 活动图 |
|---|---|---|
| 表达 | 数据 / 控制流向 | 业务活动 / 流程 / 角色协作 |
| 角色划分 | 不区分 | 支持 partition / swimlane |
| 并发 | 弱 | 强(fork / join) |
| 异常 | 没有 | 支持异常处理 |
| UML 标准 | 非 | 是 |
最基本的活动图
1 | @startuml |
start/stop是起点 / 终点:活动名;是单个活动,渲染成圆角矩形- 多个活动按顺序执行
判定节点
if (...) then (...) 形式:
1 | @startuml |
多个分支:
1 | @startuml |
switch 类似 Java 里的多分支。
循环
1 | @startuml |
while ... endwhile 加 if ... else ... endif 跳出。
PlantUML 还有 repeat / repeat while 形式:
1 | @startuml |
is (是) not (否) 决定循环的 true / false 分支是哪个。
并发:fork / join
活动图最大的特点是表达并行:
1 | @startuml |
fork / fork again / end fork 表达多个并行分支。
合并:
1 | @startuml |
end fork 之后的活动只在所有 fork 分支完成后执行。
分区(partition / swimlane)
把活动按角色划分,活动图最强大的功能:
1 | @startuml |
|角色名| 切换到对应的泳道(partition)。每个角色的活动填在自己的列里。| 后的活动属于那个分区。
复杂一点的版本,连续几个活动都在同一分区可以用 partition 命名:
1 | @startuml |
partition X { ... } 把一组活动归到一区。
异常处理
PlantUML 活动图支持异常路径:
1 | @startuml |
多层 if/else 实现类似 try/catch 的语义。如果用 fork + 分组还能更细致地表达「任意一个失败就退出整个流程」:
1 | @startuml |
完整实战例子
1 | @startuml |
这个图描述了「内容审核」业务流程,4 个角色(创作者、审核系统、审核员、创作者)协作,覆盖:通过、修改、拒绝 3 种结果。
评审 checklist
- 起点 / 终点清楚?
start/stop都标了? - 分区清晰?每个角色都明确划出?
- fork / join 平衡?每个 fork 都有一个 join?
- 并发分支在评审者眼里是真正独立的?
- 异常路径都标了?
- retry 循环有明确终止条件?
踩坑清单
switch里的case一定要闭合endswitch。少一个endswitch整张图都不渲染。fork/end fork必须成对:漏一个end fork后面所有:活动;不属于任何 flow。while内的跳出要明确:单写while是死循环,必须配if ... break或者repeat ... while is (是) not (否)。- 分区切换要自然:
|角色|写多了评审眼花。建议用partition X { ... }块结构,把一组活动打包。 - 活动名不要太长:
:让用户的购物车里的每一个商品都根据当前状态重新计算价格;渲染时会被截断。建议拆分成几个活动。
与时序图的关系
| 场景 | 推荐 |
|---|---|
| 表达单个角色干完一件事的过程 | 活动图 |
| 表达多个对象之间的消息流 | 时序图 |
| 表达业务流程(含分支、异常、循环) | 活动图 |
| 表达接口调用序列 | 时序图 |
两者常常互补:一张活动图描述「流程走法」,多张时序图描述「每一步的具体对象交互」。
与 BPMN 的关系
BPMN 是「业务流程模型和符号」,专门给业务流程建模用。PlantUML 活动图能覆盖 BPMN 80% 的核心功能:
| BPMN 元素 | PlantUML 表达 |
|---|---|
| 任务 | :任务名; |
| 网关(排他 / 并行 / 包容) | if / fork / switch |
| 序列流 | --> 或隐式 |
| 池 / 道 | ` |
| 子流程 | partition X { ... } 或 note right of |
| 事件(开始 / 结束 / 中间) | start / stop / (*) |
| 消息流 | 用 :发送消息; + 同步 --> |
不需要严格遵循 BPMN 的话,活动图够用;严格 BPMN 流程建议用 Camunda Modeler 之类的专用工具,再导回 PlantUML 渲染。
一句话总结
活动图在 PlantUML 里被严重低估——能表达 fork / join / 分区 / 异常,比流程图更标准,比时序图更聚焦「流程本身」。先把流程画清楚,再画时序图补对象交互,业务文档就完整了。
- 标题: PlantUML 活动图实战:从分叉到并发
- 作者: puml.online
- 创建于 : 2026-07-29 15:05:00
- 更新于 : 2026-08-14 21:34:29
- 链接: https://puml.online/blog/plantuml-activity-diagram/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。