PlantUML顺序图 语法学习小结
1.简单示例
我们使用->
绘制参与者之间传递的消息, 而不必显式地声明参与者;同样的,也可以使用 -->
绘制一个虚线箭头。
另外,我们还可以用 <-
和 <--
,这不影响绘图,但可以提高可读性(仅适用于时序图,对于其它示意图规则是不同的)。
(箭头样式:
表示一条丢失的消息:末尾加 x
让箭头只有上半部分或者下半部分:将<
和>
替换成\
或者 /
细箭头:将箭头标记写两次 (如 >>
或 //
)
虚线箭头:用 --
替代 -
箭头末尾加圈:->o
双向箭头:<->)
@startuml Alice -> Bob: Authentication Request Bob --> Alice: Authentication Response Alice -> Bob: Another authentication Request Alice <-- Bob: another authentication Response @enduml
2.声明参与者
我们使用关键字 participant
改变参与者的先后顺序,同样的,我们也可以使用其它关键字来声明参与者:actor、
boundary、
control、
entity、
database。
关键字 as
用于重命名参与者(使用引号定义参与者),我们也可以使用关键字 order
自定义顺序来打印参与者。
@startuml actor Foo1 boundary Foo2 control Foo3 entity Foo4 database Foo5 collections Foo6 Foo1 -> Foo2 : To boundary Foo1 -> Foo3 : To control Foo1 -> Foo4 : To entity Foo1 -> Foo5 : To database Foo1 -> Foo6 : To collections participant Last order 30 participant Middle order 20 participant First order 10 @enduml
3.给自己发消息
参与者可以给自己发信息,消息文字用\n
来换行。
@startuml Alice->Alice: This is a signal to self.\nIt also demonstrates\nmultiline \ntext @enduml
4.对消息序列编号
关键字 autonumber
用于自动对消息编号,语句 autonumber start
用于指定编号的初始值,而 autonumber startincrement
可以同时指定编号的初始值和每次增加的值。
@startuml autonumber Bob -> Alice : Authentication Request Bob <- Alice : Authentication Response autonumber 15 Bob -> Alice : Another authentication Request Bob <- Alice : Another authentication Response autonumber 40 10 Bob -> Alice : Yet another authentication Request Bob <- Alice : Yet another authentication Response @enduml
5.分割示意图
关键字 newpage
用于把一张图分割成多张,在 newpage
之后添加文字,可以作为新的示意图的标题。
@startuml Alice -> Bob : message 1 Alice -> Bob : message 2 newpage Alice -> Bob : message 3 Alice -> Bob : message 4 newpage A title for the\nlast page Alice -> Bob : message 5 Alice -> Bob : message 6 @enduml
6.组合消息
我们可以通过以下关键词将组合消息:alt/else、
opt、
loop、
par、
break、
critical、
group
, 后面紧跟着消息内容
可以在标头(header)添加需要显示的文字(group
除外),关键词 end
用来结束分组(分组可以嵌套使用)。
@startuml Alice -> Bob: Authentication Request alt successful case Bob -> Alice: Authentication Accepted else some kind of failure Bob -> Alice: Authentication Failure group My own label Alice -> Log : Log attack start loop 1000 times Alice -> Bob: DNS Attack end Alice -> Log : Log attack end end else Another type of failure Bob -> Alice: Please repeat end @enduml
7.分割符
我们可以通过使用 ==
关键词来将图表分割多个步骤。
@startuml == Initialization == Alice -> Bob: Authentication Request Bob --> Alice: Authentication Response == Repetition == Alice -> Bob: Another authentication Request Alice <-- Bob: another authentication Response @enduml
8.引用
你可以在图中通过使用ref over
关键词来实现引用。
@startuml participant Alice actor Bob ref over Alice, Bob : init Alice -> Bob : hello ref over Bob This can be on several lines end ref @enduml
9.延迟
我们使用...
来表示延迟,并且可以给延迟添加注释。
@startuml Alice -> Bob: Authentication Request ... Bob --> Alice: Authentication Response ...5 minutes latter... Bob --> Alice: Bye ! @enduml
10.空间
我们使用|||
来增加空间,还可以使用数字指定增加的像素的数量。
@startuml Alice -> Bob: message 1 Bob --> Alice: ok ||| Alice -> Bob: message 2 Bob --> Alice: ok ||45|| Alice -> Bob: message 3 Bob --> Alice: ok @enduml
11.生命线的激活与撤销
关键字activate
和deactivate
用来表示参与者的生命活动,一旦参与者被激活,它的生命线就会显示出来,activate
和deactivate
适用于以上情形。destroy
表示一个参与者的生命线的终结。
还可以使用嵌套的生命线,并且运行给生命线添加颜色。
@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
12.创建参与者
我们把关键字create
放在第一次接收到消息之前,以强调本次消息实际上是在创建新的对象。
@startuml Bob -> Alice : hello create Other Alice -> Other : new create control String Alice -> String note right : You can also put notes! Alice --> Bob : ok @enduml
13.包裹参与者
我们使用box
和end box
画一个盒子将参与者包裹起来,还可以在box
关键字之后添加标题或者背景颜色。
@startuml box "Internal Service" #LightBlue participant Bob participant Alice end box participant Other Bob -> Alice : hello Alice -> Other : hello @enduml
工厂采购
- 采购员选择所需采购货品;
- 到达订货界面,接收客户信息,接收货品信息,显示货品信息;
- 到达订货管理器,创建客户取货品信息,创建订单;
- 创建客户到达客户区,客户取货品信息到达货品区;
- 创建订单到订单区。
脚本程序
@startuml skinparam backgroundColor #F5F5F5 skinparam handwritten true skinparam sequence { ArrowColor black ActorBorderColor #8B8B7A LifeLineBorderColor black LifeLineBackgroundColor #BEBEBE ParticipantBorderColor #BEBEBE ParticipantBackgroundColor #DCDCDC ParticipantFontColor #8B8B7A ParticipantFontName 黑体 ParticipantFontSize 17 ActorBackgroundColor #DCDCDC ActorFontColor #8B8B7A } actor 采购员 participant "订货界面" as 1 participant "订货管理器" as 2 participant "客户" as 3 participant "货品" as 4 participant "订单" as 5 采购员 --> 1: 客户信息() activate 1 采购员 --> 1: 选择采购货品() activate 1 1 --> 2:接收客户信息() activate 2 1 --> 2:接收货品信息() activate 2 2 --> 1: 显示货品信息() deactivate 2 2 --> 3: 创建客户() activate 3 2 --> 4: 客户取货品信息() activate 4 4 --> 2: 货品信息() activate 4 2 --> 5: 创建订单() activate 5 @enduml
顺序图