PlantUML时序图使用教程
本文介绍了使用PlantUML绘制时序图的方法。首先概述了时序图在UML中的作用,然后详细讲解了参与者声明、消息发送语法(包括箭头样式和编号)、组合信息(如分支、循环、并行等)以及生命线控制等核心功能。最后提供了美化技巧,包括主题设置、颜色调整、分割线、间隔控制和外观参数定制。文章通过点外卖的完整案例展示了时序图的综合应用,帮助读者快速掌握PlantUML时序图的绘制方法。
1. PlantUML和时序图简要介绍
- PlantUML 可以通过简洁的文本描述语言来生成 UML图(如用例图、类图、时序图等)。
- 时序图(Sequence Diagram)属于 UML 的行为图,用于展示系统中对象或参与者之间交互的时间顺序。常用于展示用例执行过程、建模系统行为或通信流程以及辅助分析系统的逻辑结构和模块责任。
2. 常用语法
2.1 声明参与者
在 PlantUML 中,时序图的构建始于声明参与者(participants)。不同关键字代表不同类型的参与者,其视觉表现也有所区别。
| 声明关键字 | 有什么用 | 长什么样 | 适用场景 |
|---|---|---|---|
actor |
外部参与者 | 小人图标 | 用户、第三方服务等系统外部对象 |
participant |
默认,未指定类型 | 矩形 | 通用场景 |
boundary |
接口或系统边界 | 圆角矩形 | Web 界面、接口、UI 层 |
control |
控制流处理 | 小圆角矩形 | Controller、Service 层 |
entity |
数据或业务实体 | 六边形 | POJO、模型类 |
database |
持久化存储 | 圆柱形 | 数据库、缓存 |
collections |
数据集合容器 | 多层堆叠图形 | List、Map 等集合 |
定义参与者示例:
默认会按照参与者声明的顺序进行排序, 也可以使用
order关键字排序,order 后面的数字数值越小,越靠前,数值一样大,按照声明顺序。

别名:还可以使用as给他们起别名方便后面使用,-> 表示发送消息,--> 表示返回消息。
- 取别名以后原名字不能再使用;
- 声明参与者的时候,如果名字中间有空格或者想使用除字母、数字外的其他字符,可以使用双引号
""将名字括起来,但是别名是不允许有双引号。

2.2 消息发送
2.2.1 箭头样式
除了2.1部分介绍的基本箭头样式,还可以选择样式来表达不同信息:
| 消息作用 | 使用方式 |
|---|---|
| 表示一条丢失的消息 | 末尾加 x |
| 让箭头只有上半部分或者下半部分 | 将<和>替换成\或者 / |
| 细箭头 | 将箭头标记写两次 (如 >>或 //) |
| 箭头末尾加圈 | ->o |
| 双向箭头 | <-> |

注:消息太长,可以使用
\n进行换行。
2.2.2 消息编号
可以使用autonumber 自动对消息进行编号,其中:
autonumber X表示从指定的数字X开始编号 ;autonumber X Y表示从指定数字X开始编号,步长为Y。
2.3 组合信息
下面这些关键字都是用来组合信息的,根据场景需要选择对应的关键字,使用 end 结束这个一个信息组合。
| 关键字 | 有什么用 | 类比Java场景 |
|---|---|---|
alt / else |
条件分支,类似 if / else |
if / else |
opt |
可选执行逻辑,仅一个条件块 | if (单分支) |
loop |
重复执行某段流程 | for / while |
par |
并行执行多个片段 | 多线程 / 并发结构 |
break |
提前跳出流程(一般配合 loop 使用) |
break |
critical |
标记关键区段,避免并发冲突 | synchronized / 临界区 |
group |
自定义分组并加标题(无语义约束) | 注释区 / 分区块 |
使用案例
下面以一个点外卖的例子作为这些关键字的使用示例。
简要说明:
group:把整个下单流程分组
alt/else:选择支付方式(微信或支付宝)
opt:可选步骤(用优惠券)
critical:关键步骤(商家必须接单)
loop + break:循环等待接单,超时则跳出
par:商家做餐和平台通知用户同时进行
2.4 生命线
activate表示参与者的生命活动激活deactivate表示参与者的生命活动撤销
3. 美化
3.1 主题美化
具体参考plantuml 内置 theme 整理。
3.2 颜色
参与者:#为参与者设置颜色,可以是 RGB 或者颜色对应的单词。
箭头:在箭头中间插入 [#color] 可以设置箭头颜色。
3.3 分割符
== xxx == 可以分割流程。
3.4 间隔
如果信息过于密集,可以使用 ||| 来增加空间,或者 ||size|| 指定空间大小。
3.5 skinparam 外观参数
skinparam handwritten true 开启手绘风格skinparam backgroundColor #颜色RGB 指定背景颜色skinparam ParticipantPadding 数值 指定参与者的外边距skinparam BoxPadding 数值 指定 box 的外边距
火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。
更多推荐
所有评论(0)