PlantUML系列文章
PlantUML绘制活动图https://blog.csdn.net/zhangwei_david/article/details/125507374PlantUML绘制类图https://blog.csdn.net/zhangwei_david/article/details/125477021
目录
什么是时序图
时序图有时候也被称为序列图,活动序列图,作为交互图的一种,时序图按照时间顺序从上往下显示每个操作。
案例说明
我们以一个日常生活中常见的操作,在ATM上查询银行卡账户余额,首先用户先将银行卡插入读卡器,然后在屏幕上输入密码,如果密码错误则回提示重新输入密码,如果密码正确则会收到一条登陆ATM的提示短信。我们根据这个流程怎么绘制时序图呢?我们就看看下图:
在这幅图中,垂直的虚线叫做参与者的生面线,表示一个对象的存活时间。每个箭头都表示一个调用。我们在了解时序图以后,我们看看如何使用PlantUML 绘制时序图。
Idea安装PlantUML插件
idea->preferences->plugin;在marketplace中搜索PlanUML Integration, 进行安装;安装后我们就可在idea中新建一个PlantUML 文件,图下图所示
PlantUML语法
上文中ATM的时序图就是使用PlantUML绘制的,plantUML 文件是以 @startuml 开头, 以 @enduml结尾,如下所示:
@startuml
'https://plantuml.com/sequence-diagram
title 时序图示例
header @author chenxiu
footer page @author chenxiu
skinparam roundcorner 20
skinparam sequenceParticipant underline
skinparam LifeLineBackgroundColor #lightYellow
hide footbox
actor User as user #green
box ATM
control 屏幕 as app #lightBlue
participant 读卡器 as reader #yellow
end box
box BANK #lightBlue
participant service
entity 短信
queue MessageQueue
database Mysql
activate user
user->reader #lightBlue:插如银行卡
activate reader
reader-> reader:读卡
activate reader
deactivate reader
reader->app:显示屏幕
deactivate reader
activate app
app ->user:提示输入密码
deactivate app
user->app:输入密码
activate app
app-> service:查询用户
activate service
service->Mysql:查询用户
activate Mysql
Mysql ->service:resultSet
deactivate Mysql
alt 用户存在
service ->> MessageQueue:发送登陆ATM消息
activate MessageQueue
note over MessageQueue #red:通过消息队列消峰
...30秒...
MessageQueue ->短信:发送短信
activate 短信
短信 -->user
deactivate 短信
deactivate MessageQueue
service ->app:服务选项
app -> user :提示选择服务
else 用户不存在
|||
service->app:登陆失败
deactivate service
app-> user:重新输入密码
deactivate app
end
@enduml
通过上文的DEMO,我们逐步来分析时序图的内容
声明参与者
在时序图中使用 a -> b绘制两个参与者之间的关系,a,b 都是参与者,不必明确声明.但是如果需要对参与者进行更多的控制就需要声明参与者,在PlantUML 中支持其中参与者
参与者 | 含义 |
participant | 参与者 |
actor | 角色 |
boundary | 边界 |
control | 控制 |
entity | 实体 |
database | 数据库 |
collections | 集合 |
queue | 队列 |
各个参与者的效果如下图所示:
可以使用 as 关键字给参与者取别名,也可以针对参与者使用多行定义,具体代码示例如下:
@startuml
'https://plantuml.com/sequence-diagram
'使用 as 关键字对参与者Actor取别名 user,在后续的代码中可以直接使用别名'
actor Actor as user
participant Participant
participant 多行参与者 [
=标题
----
副标题
]
control Control
boundary Boundary
entity Entity
collections Collections
queue Queue
database Database
user->Participant
user->多行参与者
user->Control
user->Boundary
user->Entity
user -> Collections
user->Queue
user->Database
@enduml
注释
在代码中使用 ‘注释’ 针对代码进行注释,在UML中使用如下语句添加注释
note right: this is another note note left: this is another note note over Alice: This is displayed over Alice.
组合消息
可以通过以下关键字来组合消息
关键字 | 含义 |
alt/else/end | if..else |
loop/end | 循环 |
par/end | 常态 |
break/end | 中断条件 |
critical/end | 条件 |
group | 分组 |
opt | 可选项 |
代码示例
@startuml
'https://plantuml.com/sequence-diagram
A ->B
alt success
B-> C
opt 可选逻辑
C-->D
end
par 正常场景
C-->D
end
critical input==1
C-->E
end
break input <=0
E ->C
end
group 分组说明 [second]
loop 100次
B->B:自旋
end
end
C -->A
|||
else fail
|||
B--> A
end
@enduml
颜色
在PlantUML 中很多元素都是可以修改颜色的,下面我们分别来看看修改颜色
说明 | 语法示例 |
修改参与者颜色 | participant Participant #blue |
改变箭头颜色 | user -[#blue]> Participant |
改变消息颜色 | user -> participant:<font color=red> requestg |
改变生面线颜色 | 控制器 ->alice #lightyellow:认证失败 |
修改注释颜色 | note over Alice, Bob #FFAAAA: This is displayed\n over Bob and Alice.
|
修改背景颜色 | skinparam backgroundColor #EEEBDCm |
锚点和持续时间
可以在时序图中添加锚点,进而指定持续时间
@startuml
!pragma teoz true
{start} Alice -> Bob : start doing things during duration
Bob -> Max : something
Max -> Bob : something else
{end} Bob -> Alice : finish
{start} <-> {end} : some time
@enduml
其他
说明 | 语法 | 备注 |
标题 | title 时序图示例 | |
页头 | header 我是页头 | |
页脚 | footer page 1/2 | |
开启自动序号 | autonumber | |
隐藏脚注 | hide footbox | |
延迟 | ... 五分钟后 ... | |
分页 | newpage | |
分割 | == 分割 == | |
激活生命线 | activate | |
撤销生命线 | deactivate | |
终结生命线 | destory | |
自动激活生命线 | autoactivate on /return | |
创建对象 | create | |
包裹参与者 | box/end box | 可以使用box, end box 将多个声明参与者包围在一起 |
隐藏孤立的参与者 | hide unlinked |
参考资料: