第一部分:順序圖語法html
(1)簡單示例:你能夠用->
來繪製參與者之間傳遞的消息, 而沒必要顯式地聲明參與者。你也能夠使用 -->
繪製一個虛線箭頭。另外,你還能用 <-
和 <--
,這不影響繪圖,但能夠提升可讀性。 注意:僅適用於時序圖,對於其它示意圖,規則是不一樣的。ide
1 @startuml 2 Alice -> Bob: Authentication Request 3 Bob --> Alice: Authentication Response 4 5 Alice -> Bob: Another authentication Request 6 Alice <-- Bob: another authentication Response 7 @enduml
(2)聲明參與者:關鍵字 participant
用於改變參與者的前後順序。oop
你也能夠使用其它關鍵字來聲明參與者:ui
actor
boundary
control
entity
database
1 @startuml 2 actor Foo1 3 boundary Foo2 4 control Foo3 5 entity Foo4 6 database Foo5 7 collections Foo6 8 Foo1 -> Foo2 : To boundary 9 Foo1 -> Foo3 : To control 10 Foo1 -> Foo4 : To entity 11 Foo1 -> Foo5 : To database 12 Foo1 -> Foo6 : To collections 13 14 @enduml
1 @startuml 2 actor Bob #red 3 ' The only difference between actor 4 'and participant is the drawing 5 participant Alice 6 participant "I have a really\nlong name" as L #99FF99 7 /' You can also declare: 8 participant L as "I have a really\nlong name" #99FF99 9 '/ 10 11 Alice->Bob: Authentication Request 12 Bob->Alice: Authentication Response 13 Bob->L: Log transaction 14 @enduml
您能夠使用關鍵字 order
自定義順序來打印參與者。this
1 @startuml 2 participant Last order 30 3 participant Middle order 20 4 participant First order 10 5 @enduml
(3)在參與者中使用非字母符號:你能夠使用引號定義參與者,還能夠用關鍵字 as
給參與者定義別名。spa
1 @startuml 2 Alice -> "Bob()" : Hello 3 "Bob()" -> "This is very\nlong" as Long 4 ' You can also declare: 5 ' "Bob()" -> Long as "This is very\nlong" 6 Long --> "Bob()" : ok 7 @enduml
(4)給本身發消息:參與者能夠給本身發信息,消息文字能夠用\n
來換行。3d
1 @startuml 2 Alice->Alice: This is a signal to self.\nIt also demonstrates\nmultiline \ntext 3 @enduml
(5)修改箭頭樣式:修改箭頭樣式的方式有如下幾種:code
x
<
和>
替換成\
或者 /
>>
或 //
)--
替代 -
->o
<->
1 @startuml 2 Bob ->x Alice 3 Bob -> Alice 4 Bob ->> Alice 5 Bob -\ Alice 6 Bob \\- Alice 7 Bob //-- Alice 8 9 Bob ->o Alice 10 Bob o\\-- Alice 11 12 Bob <-> Alice 13 Bob <->o Alice 14 @enduml
(6)對消息序列編號:關鍵字 autonumber
用於自動對消息編號。語句 autonumber start
用於指定編號的初始值,而 autonumber startincrement
能夠同時指定編號的初始值和每次增長的值。orm
1 @startuml 2 autonumber 3 Bob -> Alice : Authentication Request 4 Bob <- Alice : Authentication Response 5 @enduml
1 @startuml 2 autonumber 3 Bob -> Alice : Authentication Request 4 Bob <- Alice : Authentication Response 5 6 autonumber 15 7 Bob -> Alice : Another authentication Request 8 Bob <- Alice : Another authentication Response 9 10 autonumber 40 10 11 Bob -> Alice : Yet another authentication Request 12 Bob <- Alice : Yet another authentication Response 13 14 @enduml
1 @startuml 2 autonumber "<b>[000]" 3 Bob -> Alice : Authentication Request 4 Bob <- Alice : Authentication Response 5 6 autonumber 15 "<b>(<u>##</u>)" 7 Bob -> Alice : Another authentication Request 8 Bob <- Alice : Another authentication Response 9 10 autonumber 40 10 "<font color=red><b>Message 0 " 11 Bob -> Alice : Yet another authentication Request 12 Bob <- Alice : Yet another authentication Response 13 14 @enduml
1 @startuml 2 autonumber 10 10 "<b>[000]" 3 Bob -> Alice : Authentication Request 4 Bob <- Alice : Authentication Response 5 6 autonumber stop 7 Bob -> Alice : dummy 8 9 autonumber resume "<font color=red><b>Message 0 " 10 Bob -> Alice : Yet another authentication Request 11 Bob <- Alice : Yet another authentication Response 12 13 autonumber stop 14 Bob -> Alice : dummy 15 16 autonumber resume 1 "<font color=blue><b>Message 0 " 17 Bob -> Alice : Yet another authentication Request 18 Bob <- Alice : Yet another authentication Response 19 @enduml
(7)組合消息:咱們能夠經過如下關鍵詞將組合消息:htm
alt/else
opt
loop
par
break
critical
group
, 後面緊跟着消息內容 能夠在標頭(header)添加須要顯示的文字(group
除外)。關鍵詞 end
用來結束分組。注意,分組能夠嵌套使用。
1 @startuml 2 Alice -> Bob: Authentication Request 3 4 alt successful case 5 6 Bob -> Alice: Authentication Accepted 7 8 else some kind of failure 9 10 Bob -> Alice: Authentication Failure 11 group My own label 12 Alice -> Log : Log attack start 13 loop 1000 times 14 Alice -> Bob: DNS Attack 15 end 16 Alice -> Log : Log attack end 17 end 18 19 else Another type of failure 20 21 Bob -> Alice: Please repeat 22 23 end 24 @enduml
(8)給消息添加註釋:咱們能夠經過在消息後面添加 note left
或者 note right
關鍵詞來給消息添加註釋。你也能夠經過使用 end note
來添加多行註釋。
1 @startuml 2 Alice->Bob : hello 3 note left: this is a first note 4 5 Bob->Alice : ok 6 note right: this is another note 7 8 Bob->Bob : I am thinking 9 note left 10 a note 11 can also be defined 12 on several lines 13 end note 14 @enduml
(9)Creole和HTML:
1 @startuml 2 participant Alice 3 participant "The **Famous** Bob" as Bob 4 5 Alice -> Bob : hello --there-- 6 ... Some ~~long delay~~ ... 7 Bob -> Alice : ok 8 note left 9 This is **bold** 10 This is //italics// 11 This is ""monospaced"" 12 This is --stroked-- 13 This is __underlined__ 14 This is ~~waved~~ 15 end note 16 17 Alice -> Bob : A //well formatted// message 18 note right of Alice 19 This is <back:cadetblue><size:18>displayed</size></back> 20 __left of__ Alice. 21 end note 22 note left of Bob 23 <u:red>This</u> is <color #118888>displayed</color> 24 **<color purple>left of</color> <s:red>Alice</strike> Bob**. 25 end note 26 note over Alice, Bob 27 <w:#FF33FF>This is hosted</w> by <img sourceforge.jpg> 28 end note 29 @enduml
(10)分隔符:你能夠經過使用 ==
關鍵詞來將你的圖表分割多個步驟。
1 @startuml 2 3 == Initialization == 4 5 Alice -> Bob: Authentication Request 6 Bob --> Alice: Authentication Response 7 8 == Repetition == 9 10 Alice -> Bob: Another authentication Request 11 Alice <-- Bob: another authentication Response 12 13 @enduml
(11)生命線的激活與撤銷:關鍵字activate
和deactivate
用來表示參與者的生命活動。一旦參與者被激活,它的生命線就會顯示出來。activate
和deactivate
適用於以上情形。destroy
表示一個參與者的生命線的終結。
1 @startuml 2 participant User 3 4 User -> A: DoWork 5 activate A 6 7 A -> B: << createRequest >> 8 activate B 9 10 B -> C: DoWork 11 activate C 12 C --> B: WorkDone 13 destroy C 14 15 B --> A: RequestCreated 16 deactivate B 17 18 A -> User: Done 19 deactivate A 20 21 @enduml
1 @startuml 2 participant User 3 4 User -> A: DoWork 5 activate A #FFBBBB 6 7 A -> A: Internal call 8 activate A #DarkSalmon 9 10 A -> B: << createRequest >> 11 activate B 12 13 B --> A: RequestCreated 14 deactivate B 15 deactivate A 16 A -> User: Done 17 deactivate A 18 19 @enduml
(12)進入和發出消息:若是隻想關注部分圖示,你能夠使用進入和發出箭頭。使用方括號[
和]
表示圖示的左、右兩側。
1 @startuml 2 [-> A: DoWork 3 4 activate A 5 6 A -> A: Internal call 7 activate A 8 9 A ->] : << createRequest >> 10 11 A<--] : RequestCreated 12 deactivate A 13 [<- A: Done 14 deactivate A 15 @enduml
1 @startuml 2 [-> Bob 3 [o-> Bob 4 [o->o Bob 5 [x-> Bob 6 7 [<- Bob 8 [x<- Bob 9 10 Bob ->] 11 Bob ->o] 12 Bob o->o] 13 Bob ->x] 14 15 Bob <-] 16 Bob x<-] 17 @enduml
(13)構造類型和圈點:能夠使用<<
和>>
給參與者添加構造類型。在構造類型中,你能夠使用(X,color)
格式的語法添加一個圓圈圈起來的字符。
1 @startuml 2 3 participant "Famous Bob" as Bob << Generated >> 4 participant Alice << (C,#ADD1B2) Testable >> 5 6 Bob->Alice: First message 7 8 @enduml
1 @startuml 2 3 skinparam guillemet false 4 participant "Famous Bob" as Bob << Generated >> 5 participant Alice << (C,#ADD1B2) Testable >> 6 7 Bob->Alice: First message 8 9 @enduml
(14)更多標題信息:在標題描述中使用\n
表示換行。還能夠使用關鍵字title
和end title
定義多行標題。
1 @startuml 2 3 title __Simple__ communication example\non several lines 4 5 Alice -> Bob: Authentication Request 6 Bob -> Alice: Authentication Response 7 8 @enduml
1 @startuml 2 3 title 4 <u>Simple</u> communication example 5 on <i>several</i> lines and using <font color=red>html</font> 6 This is hosted by <img:sourceforge.jpg> 7 end title 8 9 Alice -> Bob: Authentication Request 10 Bob -> Alice: Authentication Response 11 12 @enduml
(15)包裹參與者:能夠使用box
和end box
畫一個盒子將參與者包裹起來。還能夠在box
關鍵字以後添加標題或者背景顏色。
1 @startuml 2 3 box "Internal Service" #LightBlue 4 participant Bob 5 participant Alice 6 end box 7 participant Other 8 9 Bob -> Alice : hello 10 Alice -> Other : hello 11 12 @enduml
(16)移除腳註:使用hide footbox
關鍵字移除腳註。
1 @startuml 2 3 hide footbox 4 title Footer removed 5 6 Alice -> Bob: Authentication Request 7 Bob --> Alice: Authentication Response 8 9 @enduml
(17)外觀參數(skinparam):
1 @startuml 2 skinparam sequenceArrowThickness 2 3 skinparam roundcorner 20 4 skinparam maxmessagesize 60 5 skinparam sequenceParticipant underline 6 7 actor User 8 participant "First Class" as A 9 participant "Second Class" as B 10 participant "Last Class" as C 11 12 User -> A: DoWork 13 activate A 14 15 A -> B: Create Request 16 activate B 17 18 B -> C: DoWork 19 activate C 20 C --> B: WorkDone 21 destroy C 22 23 B --> A: Request Created 24 deactivate B 25 26 A --> User: Done 27 deactivate A 28 29 @enduml
1 @startuml 2 skinparam backgroundColor #EEEBDC 3 skinparam handwritten true 4 5 skinparam sequence { 6 ArrowColor DeepSkyBlue 7 ActorBorderColor DeepSkyBlue 8 LifeLineBorderColor blue 9 LifeLineBackgroundColor #A9DCDF 10 11 ParticipantBorderColor DeepSkyBlue 12 ParticipantBackgroundColor DodgerBlue 13 ParticipantFontName Impact 14 ParticipantFontSize 17 15 ParticipantFontColor #A9DCDF 16 17 ActorBackgroundColor aqua 18 ActorFontColor DeepSkyBlue 19 ActorFontSize 17 20 ActorFontName Aapex 21 } 22 23 actor User 24 participant "First Class" as A 25 participant "Second Class" as B 26 participant "Last Class" as C 27 28 User -> A: DoWork 29 activate A 30 31 A -> B: Create Request 32 activate B 33 34 B -> C: DoWork 35 activate C 36 C --> B: WorkDone 37 destroy C 38 39 B --> A: Request Created 40 deactivate B 41 42 A --> User: Done 43 deactivate A 44 45 @enduml
(18)填充區設置:能夠設定填充區的參數配置。
1 @startuml 2 skinparam ParticipantPadding 20 3 skinparam BoxPadding 10 4 5 box "Foo1" 6 participant Alice1 7 participant Alice2 8 end box 9 box "Foo2" 10 participant Bob1 11 participant Bob2 12 end box 13 Alice1 -> Bob1 : hello 14 Alice1 -> Out : out 15 @enduml
第二部分:《工廠採購》系統對象交互順序
第三部分:《工廠採購》系統順序圖
1 @startuml 2 skinparam sequenceArrowThickness 2 3 skinparam roundcorner 20 4 skinparam maxmessagesize 60 5 skinparam sequenceParticipant underline 6 7 actor 採購員 8 participant "定貨界面" as A 9 participant "定貨管理器" as B 10 participant "客戶" as C 11 participant "貨品" as D 12 participant "訂單" as E 13 14 採購員 -> A: 客戶信息() 15 activate A 16 採購員 -> A: 選擇定貨貨品() 17 activate A 18 19 A -> B:接收客戶信息() 20 activate B 21 A -> B:接收貨品信息() 22 activate B 23 B --> A: 顯示貨品信息() 24 deactivate B 25 26 B -> C: 建立客戶()<<create>> 27 activate C 28 B -> D: 取貨品信息() 29 activate D 30 D --> B: 貨品信息() 31 activate D 32 B -> E: 建立訂單()<<create>> 33 activate E 34 @enduml