PlantUML
Sequence Diagram(时序图)

@startuml 示例
== 一、声明参与者 ==
' participant(参与者)
' actor(角色)
' boundary(边界)
' control(控制)
' entity(实体)
' database(数据库)
' collections(集合)
' queue(队列)
participant Participant as A
actor Actor as B
boundary Boundary as C
control Control as D
entity Entity as E
' database Database as F
' collections Collections as G
' queue Queue as H
A -> A : To participant
A -> B : To actor
B -> C : To boundary
C -> D : To control
D -> E : To entity
' 可以把关键字 create 放在第一次接收到消息之前,以强调本次消息实际上是在创建新的对象
create I
A -> I
== 二、文本对齐 ==
' 箭头上的文本对齐可以用 skinparam sequenceMessageAlign,后接参数 left/right/center
skinparam sequenceMessageAlign center
' 让响应信息显示在箭头下面
skinparam responseMessageBelowArrow true
' 消息文字可以用 \n 来换行
A -> A : This is a signal to self. \nIt also demonstrates
' 您可以使用 sequenceMessageSpan 命令来让消息文本跨越涉及的参与者范围
!pragma teoz true
!pragma sequenceMessageSpan true
' 可以使用 ||| 来增加空间
' 可以使用数字指定增加的像素数量
A -> A : 空间示意
|||
A -> A : 空间示意
||60||
A -> A : 空间示意
' 可以使用 & teoz 命令显示并行信息
!pragma teoz true
A -> B : hello
& B -> C : hi
== 三、改变箭头样式 ==
' 添加最后的 x 表示丢失的信息
' 使用 \ 或 / 而不是 < 或 > 只拥有箭头的底部或顶部部分
' 重复箭头(例如 >> 或 // ),拥有一个薄的图纸
' 使用 -- 而不是 - 拥有一个点状箭头
' 在箭头头添加最后的 "o"
' 使用双向的箭头 <->
A ->x B
A -> B
A ->> B
A -\ B
A \\- B
A //-- B
A ->o B
A o\\-- B
A <-> B
A <->o B
' 修改箭头颜色
A -[#red]> B : hello
B -[#0000FF]-> A : ok
== 四、页面标题、页眉和页脚 ==
' title 关键字用于为页面添加标题
' 以下效果等同:title __Example__ Title \non several lines
title
__Example__ Title
on several lines
end title
' 页面可以使用 header 和 footer 显示页眉和页脚
header Page Header
footer Page %page% of %lastpage%
' 使用 hide footbox 关键字移除脚注
hide footbox
' 为了符合严格 UML 的标准(线头的形状必须是三角形,而不能是箭头形),你可以使用
skinparam style strictuml
== 五、组合消息 ==
' alt/else
' opt
' loop
' par
' break
' critical
' group,后面紧跟着消息内容
'
' 关键词 end 用来结束分组
' 分组可以嵌套使用
B -> C : 认证请求
alt 成功情况
B -> C : 认证接受
else 某种失败情况
C -> B : 认证失败
group 我自己的标签
B -> D : 开始记录攻击日志
loop 1000次
B -> C : DNS 攻击
end
B -> D : 结束记录攻击日志
end
else 另一种失败
C -> B : 请重复
end
' 可以使用 box 和 end box 画一个盒子将参与者包裹起来
' 可以在 box 关键字之后添加标题或者背景颜色
box "Internal Service" #LightBlue
create K
create L
K -> L
L --> K
end box
== 六、注释信息 ==
' 可以使用 note left 或 note right 关键字在信息后面加上注释
' 可以使用 end note 关键字有一个多行注释
' 可以使用 note left of,note right of 或 note over 在节点(participant)的相对位置放置注释
' 可以使用 note across 在所有参与者之间添加备注
C -> D : hello
note left : this is a first note
D -> C : ok
note right : this is another note
D -> D : I am thinking
note left
a note
can also be defined
on several lines
end note
note left of C
This is displayed
left of C.
end note
note right of C : This is displayed right of C.
note over C : This is displayed over C.
note over C, D #FFAAAA : This is displayed\n over D and C.
note over D, C
This is yet another
example of
a long note.
end note
note across : This is displayed across
' 可以使用 / 可以在同一级对齐多个备注
note over C : C 的初始状态
note over D : D 的初始状态
D -> C : hello
note over C : C 的初始状态
/ note over D : D 的初始状态
D -> C : hello
== 七、生命线的激活与撤销 ==
' 关键字 activate 和 deactivate 用来表示参与者的生命活动
' destroy 表示一个参与者的生命线的终结
' 可以使用嵌套的生命线,并且给生命线添加颜色
A -> B : DoWork
activate B #FFBBBB
B -> B : Internal call
activate B #DarkSalmon
B -> C : << createRequest >>
activate C
C -> D : DoWork
activate D
D --> C : WorkDone
destroy D
C --> B : RequestCreated
deactivate C
deactivate B
B -> A : Done
deactivate B
' 新命令 return 可以用于生成一个带有可选文本标签的返回信息
' 返回的点是导致最近一次激活生命线的点
' 语法是简单的返回标签,其中标签(如果提供)可以是传统信息中可以接受的任何字符串
A -> B : hello
activate B
B -> B : some action
return bye
' 在指定目标参与者后,可以立即使用以下快捷语法:
' ++ 激活目标(可选择在后面加上 #color)
' -- 撤销激活源
' ** 创建目标实例
' !! 摧毁目标实例
A -> B ++ : hello
B -> B ++ : self call
B -> C ++ #005500 : hello
B -> J ** : create
return done
return rc
B -> J !! : delete
return success
' 可以在一行上同时激活和撤销
A -> B ++ : hello1
B -> C --++ : hello2
C --> A -- : ok
A -> B ++ #gold : hello3
B -> A --++ #gold : ok
A -> B -- : hello4
== 八、锚点和持续时间 ==
' 使用teoz在图表中添加锚点,从而指定持续时间
!pragma teoz true
{start} A -> C : start doing things during duration
C -> E : something
E -> C : something else
{end} C -> A : finish
{start} <-> {end} : some time
@enduml