文章目录
Plant UML介绍及使用
PlantUML 是一个开源项目,支持快速绘制:
• 时序图
• 用例图
• 类图
• 活动图
• 组件图
• 状态图
• 对象图
通过简单直观的语言来定义这些示意图。
简单示例
实例1
@startuml
Alice -> Bob: Authentication Request
Bob --> Alice: Authentication Response
Alice -> Bob: Another authentication Request
Alice <-- Bob: another authentication Response
@enduml
实例2
@startuml sample
用户 -> 认证中心: 登录操作
认证中心 -> 缓存: 存放(key=token+ip, value=token)TitleBorderThickness
用户 <- 认证中心: 认证成功返回token
用户 -> 认证中心:下次访问头部携带token认证
认证中心 <- 缓存: key=token+ip获取token
其他服务 <- 认证中心: 存在且校验成功则跳转到用户请求的其他服务
其他服务 -> 用户: 信息
@enduml
声明参与者
使用 participant 关键字来声明一个参与者可以使你对参与者做出更多控制。
关键字 participant 用于改变参与者的先后顺序。
你也可以使用下面这些关键字来声明参与者,这会改变参与者的外观:
• actor(角色)
• boundary(边界)
• control(控制)
• entity(实体)
• database(数据库)
• collections(集合)
• queue(队列)
实例3
@startuml simple
participant participant as Foo
actor actor as Foo1
boundary boundary as Foo2
control control as Foo3
entity entity as Foo4
database database as Foo5
collections collections as Foo6
queue queue as Foo7
Foo -> Foo1 : To actor
Foo -> Foo2 : To boundary
Foo -> Foo3 : To control
Foo -> Foo4 : To entity
Foo -> Foo5 : To database
Foo -> Foo6 : To collections
Foo -> Foo7 : To queue
@enduml
给自己发消息
参与者可以给自己发信息,消息文字可以用来换行。
@startuml sample
A -> A : The first line.\nThe second line.\nThe third line.
@enduml
改箭头样式
实例4
@startuml sample1
A ->x B : ->x
A -> B : ->
A ->> B : ->>
A -\ B : -\\
A \\- B : \\\-
A //-- B : //--
A ->o B : ->o
A o\\-- B : o\\\--
A <-> B : <->
A <->o B : <->o
@enduml
对消息序列编号
关键字 autonumber 用于自动对消息编号。
实例5
@startuml simple2
autonumber
A -> B : Authentication request.
B -> A : Authentication response.
@enduml
分割示意图
关键字 newpage 用于把一张图分割成多张。
在 newpage 之后添加文字,作为新的示意图的标题。
这样就能很方便地在 Word 中将长图分几页打印。
实例6
@startuml simple3
A -> B : send message1.
A -> B : send message2.
newpage A title for the second page.
A -> B : send message3.
A -> B : send message4.
newpage A title for the last page.
A -> B : send message5.
A -> B : send message6.
@enduml
组合消息1
可以通过以下关键词来组合消息:
片段类型 | 名称 | 说明 |
---|---|---|
Opt | 选项 | 包含一个可能发生或可能不发生的序列。 可以在临界中指定序列发生的条件。 |
Alt | 抉择 | 包含一个片段列表,这些片段包含备选消息序列。 在任何场合下只发生一个序列。 可以在每个片段中设置一个临界来指示该片段可以运行的条件。 else 的临界指示其他任何临界都不为 True 时应运行的片段。 如果所有临界都为 False 并且没有 else,则不执行任何片段。 |
Loop | 循环 | 片段重复一定次数。 可以在临界中指示片段重复的条件。 Loop 组合片段具有“Min”和“Max”属性,它们指示片段可以重复的最小和最大次数。 默认值是无限制。 |
Break | 中断 | 如果执行此片段,则放弃序列的其余部分。 可以使用临界来指示发生中断的条件。 |
Par | 并行 | 并行处理。 片段中的事件可以交错。 |
Critical | 关键 | 用在 Par 或 Seq 片段中。 指示此片段中的消息不得与其他消息交错。 |
Seq | 弱顺序 | 有两个或更多操作数片段。 涉及同一生命线的消息必须以片段的顺序发生。 如果消息涉及的生命线不同,来自不同片段的消息可能会并行交错。 |
Strict | 强顺序 | 有两个或更多操作数片段。 这些片段必须按给定顺序发生。 |
组合消息2
实例7
@startuml simple4
A -> B : 认证请求
alt 成功情况
B -> A : 认证成功
else 某种失败情况
B -> A : 认证失败
group 我自己的标签
A -> Log : 开始记录攻击日志
loop 1000次
A -> B : DNS攻击
end
A -> Log : 结束记录攻击日志
end
else 另一种失败
B -> A : 请重复
end
opt abc
end
@enduml
给消息添加注释
可以通过在消息后面添加 note left 或者 note right 关键词来给消息添加注释。
也可以通过使用 end note 来添加多行注释。
实例8
@startuml simple5
A -> B : Hi
note left: This is first note.
A <- B : OK
note right: This is second note.
B -> B : Think
note right
a note
can also be defined
on several lines.
end note
@enduml
分隔符
通过使用 == 关键词来将你的图表分割成多个逻辑步骤。
实例9
@startuml simple6
== 初始化 ==
A -> B : 请求认证
A <- B : 认证响应
== 重复 ==
A -> B : 请求认证
A <- B : 认证响应
@enduml
生命线的激活与撤销
关键字 activate 和 deactivate 用来表示参与者的生命活动。
一旦参与者被激活,它的生命线就会显示出来。
activate 和 deactivate 适用于以上情形。
destroy 表示一个参与者的生命线的终结。
实例10
@startuml simple7
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
生命线激活、撤销的快捷语法
在指定目标参与者后,可以立即使用以下语法:
• ++ 激活目标(可选择在后面加上 #color)
• – 撤销激活源
• ** 创建目标实例
• !! 摧毁目标实例
实例11
@startuml sample8
participant User
User -> A ++ : DoWork
A -> B ++ : <<createRequest>>
B -> C ++ : DoWork
C -> B : WorkDone
return WorkDone
destroy C
return RequestCreated
'注释掉
'B --> A : RequestCreated
A -> User --: Done
@enduml
PlantUML介绍
安装java并为其配置环境变量
https://www.oracle.com
从官网下载java,并根据提示步骤安装,安装完成后对环境变量进行配置。
安装graphviz并配置环境变量
http://www.graphviz.org/download/
安装完graphviz后需对其进行环境变量的配置,只需在PATH中添加graphviz的路径。
安装VSCode
https://code.visualstudio.com/