大纲
PlantUML时序绘画工具
[PlantUML 官网] (https://plantuml.com/zh/)
PlantUML是一个多功能组件,可快速、直接地创建图表。用户可以使用简单直观的语言起草各种图表
序列图
[序列图说明] (https://plantuml.com/zh/sequence-diagram)
序列图案例1
sequence_1.puml
@startuml
'https://plantuml.com/sequence-diagram
Alice -> Bob: Authentication Request
Bob --> Alice: Authentication Response
Alice -> Bob: Another authentication Request
Alice <-- Bob: another authentication Response
@enduml
序列图案例2_autonumber
关键字 autonumber 用于自动对消息编号
autonumber //start// 用于指定编号的初始值,而 autonumber //start// //increment// 可以同时指定编号的初始值和每次增加的值
autonumber 在双引号内指定编号的格式。 格式是由 Java 的DecimalFormat类实现的: (0 表示数字;# 也表示数字,但默认为0)。
sequence_2.puml
@startuml
'https://plantuml.com/sequence-diagram
autonumber
Alice -> Bob: Authentication Request
Bob --> Alice: Authentication Response
Alice -> Bob: Another authentication Request
Alice <-- Bob: another authentication Response
@enduml
序列图案例3_participant
如果使用关键字participant 来声明参与者,就可以对该参与者进行更多的控制。
声明的顺序将是(默认的)显示顺序。
使用这些其他的关键字来声明参与者,将改变参与者的表示形状。
actor(角色)
boundary(边界)
control(控制)
entity(实体)
database(数据库)
collections(集合)
queue(队列)
使用as 关键字重命名参与者 ( participant Participant as Foo )
使用order 关键字来定制参与者的显示顺序 ( participant Last order 30 )
使用# 井号 来标注颜色 ( actor Bob #red )
多行定义
participant Participant [
=Title
----
""打算""
]
箭头文本对齐
skinparam sequenceMessageAlign left
skinparam sequenceMessageAlign right
skinparam sequenceMessageAlign center
让响应信息显示在箭头下面
skinparam responseMessageBelowArrow false
skinparam responseMessageBelowArrow true
关键字 autonumber 用于自动对消息编号
改变箭头样式
- 添加最后的x 表示丢失的信息
- 使用\ 或/ 而不是< 或> 只拥有箭头的底部或顶部部分
- 重复箭头头(例如» 或// )头,拥有一个薄的图纸
- 使用– 而不是- 拥有一个点状箭头
- 在箭头头添加最后的 “o”
- 使用双向的箭头<->
sequence_3.puml
@startuml
Bob ->x Alice
Bob -> Alice
Bob ->> Alice
Bob -\ Alice
Bob \\- Alice
Bob //-- Alice
Bob ->o Alice
Bob o\\-- Alice
Bob <-> Alice
Bob <->o Alice
@enduml
组合消息
我们可以通过以下关键词来组合消息:
alt/else
opt
loop
par
break
critical
group
后面紧跟着消息内容 可以在标头(header)添加需要显示的文字(对于group关键字,参看下一章节 '次级分组标签')。
关键词 end 用来结束分组。
注意,分组可以嵌套使用。
sequence_4_1.puml
@startuml
Alice -> Bob: 认证请求
alt 成功情况
Bob -> Alice: 认证接受
else 某种失败情况
Bob -> Alice: 认证失败
group 我自己的标签
Alice -> Log : 开始记录攻击日志
loop 1000次
Alice -> Bob: DNS 攻击
end
Alice -> Log : 结束记录攻击日志
end
else 另一种失败
Bob -> Alice: 请重复
end
@enduml
sequence_4_2.puml
@startuml
Alice -> Bob: 认证请求
Bob -> Alice: 认证失败
group 我自己的标签 [我自己的标签2]
Alice -> Log : 开始记录攻击日志
loop 1000次
Alice -> Bob: DNS攻击
end
Alice -> Log : 结束记录攻击日志
end
@enduml
注释信息
可以使用note left 或note right 关键字在信息后面加上注释。
你可以使用end note 关键字有一个多行注释
@startuml
Alice->Bob : hello
note left: this is a first note
Bob->Alice : ok
note right: this is another note
Bob->Bob : I am thinking
note left
a note
can also be defined
on several lines
end note
@enduml
注释信息颜色背景
@startuml
participant Alice
participant Bob
note left of Alice #aqua
This is displayed
left of Alice.
end note
note right of Alice: This is displayed right of Alice.
note over Alice: This is displayed over Alice.
note over Alice, Bob #FFAAAA: This is displayed\n over Bob and Alice.
note over Bob, Alice
This is yet another
example of
a long note.
end note
@enduml
生命线的激活与撤销
关键字activate和deactivate用来表示参与者的生命活动。
一旦参与者被激活,它的生命线就会显示出来。
activate和deactivate适用于以上情形。
destroy表示一个参与者的生命线的终结。
@startuml
participant User
User -> A: DoWork
activate A
A -> B: << createRequest >>
activate B
B -> C: DoWork
activate C
C --> B: WorkDone
destroy C
B --> A: RequestCreated
deactivate B
A -> User: Done
deactivate A
@enduml
还可以使用嵌套的生命线,并且运行给生命线添加颜色。
@startuml
participant User
User -> A: DoWork
activate A #FFBBBB
A -> A: Internal call
activate A #DarkSalmon
A -> B: << createRequest >>
activate B
B --> A: RequestCreated
deactivate B
deactivate A
A -> User: Done
deactivate A
@enduml
也可以使用自动激活关键字(autoactivate),这需要与return关键字配合
新命令return可以用于生成一个带有可选文本标签的返回信息。返回的点是导致最近一次激活生命线的点。 语法是简单的返回标签,其中标签(如果提供)可以是传统信息中可以接受的任何字符串。
@startuml
Bob -> Alice : hello
activate Alice
Alice -> Alice : some action
return bye
@enduml
@startuml
autoactivate on
alice -> bob : hello
bob -> bob : self call
bill -> bob #005500 : hello from thread 2
bob -> george ** : create
return done in thread 2
return rc
bob -> george !! : delete
return success
@enduml
激活、撤销和创建的快捷语法
在指定目标参与者后,可以立即使用以下语法:
++ 激活目标(可选择在后面加上#color)
-- 撤销激活源
** 创建目标实例
!! 摧毁目标实例
@startuml
alice -> bob ++ : hello
bob -> bob ++ : self call
bob -> bib ++ #005500 : hello
bob -> george ** : create
return done
return rc
bob -> george !! : delete
return success
@enduml
在一行上同时激活和撤销:
@startuml
alice -> bob ++ : hello1
bob -> charlie --++ : hello2
charlie --> alice -- : ok
@enduml
@startuml
alice -> bob --++ #gold: hello
bob -> alice --++ #gold: you too
alice -> bob --: step1
alice -> bob : step2
@enduml