PlantUML時序圖繪制

簡單示例(Basic examples)

你可以用 ->來繪制參與者之間傳遞的消息刘陶, 而不必顯式地聲明參與者动壤。
你也可以使用 "-->" 繪制一個虛線箭頭锅风。
另外酥诽,你還能用 "<-" 和 "<--",這不影響繪圖皱埠,但可以提高可讀性肮帐。 注意:僅適用于時序圖,對于其它示意圖边器,規(guī)則是不同的训枢。

@startuml
Alice -> Bob: Authentication Request
Bob --> Alice: Authentication Response

Alice -> Bob: Another authentication Request
Alice <-- Bob: another authentication Response
@enduml

聲明參與者(Declaring participant)

關鍵字 participant 用于改變參與者的先后順序。
你也可以使用其它關鍵字來聲明參與者:

  • actor
  • boundary
  • control
  • entity
  • database
@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

@enduml

關鍵字 as 用于重命名參與者
你可以使用RGB值或者顏色名修改 actor 或參與者的背景顏色饰抒。

@startuml
actor Bob #red
' The only difference between actor
'and participant is the drawing
participant Alice
participant "I have a really\nlong name" as L #99FF99
/' You can also declare:
   participant L as "I have a really\nlong name"  #99FF99
  '/

Alice->Bob: Authentication Request
Bob->Alice: Authentication Response
Bob->L: Log transaction
@enduml

在參與者中使用非字母符號(Use non-letters in participants)

你可以使用引號定義參與者肮砾,還可以用關鍵字 as 給參與者定義別名。

@startuml
Alice -> "Bob()" : Hello
"Bob()" -> "This is very\nlong" as Long
' You can also declare:
' "Bob()" -> Long as "This is very\nlong"
Long --> "Bob()" : ok
@enduml

給自己發(fā)消息(Message to self)

參與者可以給自己發(fā)信息袋坑,
消息文字可以用\n來換行仗处。

@startuml
Alice->Alice: This is a signal to self.\nIt also demonstrates\nmultiline \ntext
@enduml

修改箭頭樣式(Change arrow style)

修改箭頭樣式的方式有以下幾種:

  • 表示一條丟失的消息:末尾加 x
  • 讓箭頭只有上半部分或者下半部分:將<>替換成\或者 /
  • 細箭頭:將箭頭標記寫兩次 (如 >>//)
  • 虛線箭頭:用 -- 替代 -
  • 箭頭末尾加圈:->o
  • 雙向箭頭:<->
@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

修改箭頭顏色(Change arrow color)

你可以用以下記號修改箭頭的顏色:

@startuml
Bob -[#red]> Alice : hello
Alice -[#0000FF]->Bob : ok
@enduml

對消息序列編號(Message sequence numbering)

關鍵字 autonumber 用于自動對消息編號眯勾。

@startuml
autonumber
Bob -> Alice : Authentication Request
Bob <- Alice : Authentication Response
@enduml

語句 autonumber 'start' 用于指定編號的初始值,而 autonumber 'start' 'increment' 可以同時指定編號的初始值和每次增加的值婆誓。

@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

你可以在雙引號內(nèi)指定編號的格式吃环。
格式是由 Java 的DecimalFormat類實現(xiàn)的: ('0' 表示數(shù)字;'\#' 也表示數(shù)字洋幻,但默認為0)郁轻。
你也可以用 HTML 標簽來制定格式。

@startuml
autonumber "<b>[000]"
Bob -> Alice : Authentication Request
Bob <- Alice : Authentication Response

autonumber 15 "<b>(<u>##</u>)"
Bob -> Alice : Another authentication Request
Bob <- Alice : Another authentication Response

autonumber 40 10 "<font color=red><b>Message 0  "
Bob -> Alice : Yet another authentication Request
Bob <- Alice : Yet another authentication Response

@enduml

你還可以用語句 autonumber stopautonumber resume 'increment' 'format' 來表示暫臀牧簦或繼續(xù)使用自動編號好唯。

@startuml
autonumber 10 10 "<b>[000]"
Bob -> Alice : Authentication Request
Bob <- Alice : Authentication Response

autonumber stop
Bob -> Alice : dummy

autonumber resume "<font color=red><b>Message 0  "
Bob -> Alice : Yet another authentication Request
Bob <- Alice : Yet another authentication Response

autonumber stop
Bob -> Alice : dummy

autonumber resume 1 "<font color=blue><b>Message 0  "
Bob -> Alice : Yet another authentication Request
Bob <- Alice : Yet another authentication Response
@enduml

分割示意圖(Splitting diagrams)

關鍵字 newpage 用于把一張圖分割成多張。
newpage 之后添加文字燥翅,作為新的示意圖的標題骑篙。
這樣就能很方便地在 Word 中將長圖分幾頁打印。

@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

組合消息

我們可以通過以下關鍵詞將組合消息:

  • alt/else
  • opt
  • loop
  • par
  • break
  • critical
  • group, 后面緊跟著消息內(nèi)容
    可以在標頭(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

給消息添加注釋

我們可以通過在消息后面添加 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

其他的注釋

可以使用 note left of猖毫, note right ofnote over在節(jié)點(participant)的相對位置放置注釋台谍。
還可以通過修改背景色來高亮顯示注釋。
以及使用關鍵字end note來添加多行注釋鄙麦。

@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

改變備注框的形狀

你可以使用 hnoternote 這兩個關鍵字來修改備注框的形狀典唇。

@startuml
caller -> server : conReq
hnote over caller : idle
caller <- server : conConf
rnote over server
 "r" as rectangle
 "h" as hexagon
endrnote
@enduml

Creole和HTML

可以使用creole格式镊折。

@startuml
participant Alice
participant "The **Famous** Bob" as Bob

Alice -> Bob : hello --there--
... Some ~~long delay~~ ...
Bob -> Alice : ok
note left
  This is **bold**
  This is //italics//
  This is ""monospaced""
  This is --stroked--
  This is __underlined__
  This is ~~waved~~
end note

Alice -> Bob : A //well formatted// message
note right of Alice 
 This is <back:cadetblue><size:18>displayed</size></back> 
 __left of__ Alice. 
end note
note left of Bob 
 <u:red>This</u> is <color #118888>displayed</color> 
 **<color purple>left of</color> <s:red>Alice</strike> Bob**. 
end note
note over Alice, Bob
 <w:#FF33FF>This is hosted</w> by <img sourceforge.jpg>
end note 
@enduml

分隔符

你可以通過使用 == 關鍵詞來將你的圖表分割多個步驟胯府。

@startuml

== Initialization ==

Alice -> Bob: Authentication Request
Bob --> Alice: Authentication Response

== Repetition ==

Alice -> Bob: Another authentication Request
Alice <-- Bob: another authentication Response

@enduml

引用

你可以在圖中通過使用 ref over關鍵詞來實現(xiàn)引用

@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

延遲

你可以使用 ...來表示延遲,并且還可以給延遲添加注釋恨胚。

@startuml

Alice -> Bob: Authentication Request
...
Bob --> Alice: Authentication Response
...5 minutes latter...
Bob --> Alice: Bye !

@enduml

空間

你可以使用 |||來增加空間骂因。
還可以使用數(shù)字指定增加的像素的數(shù)量。

@startuml

Alice -> Bob: message 1
Bob --> Alice: ok
|||
Alice -> Bob: message 2
Bob --> Alice: ok
||45||
Alice -> Bob: message 3
Bob --> Alice: ok

@enduml

生命線的激活與撤銷

關鍵字 activatedeactivate用來表示參與者的生命活動赃泡。
一旦參與者被激活寒波,它的生命線就會顯示出來。
activatedeactivate適用于以上情形升熊。
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

創(chuàng)建參與者

你可以把關鍵字 create放在第一次接收到消息之前页屠,以強調(diào)本次消息實際上是在 創(chuàng)建新的對象。

@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

進入和發(fā)出消息

如果只想關注部分圖示,你可以使用進入和發(fā)出箭頭辰企。
使用方括號[]表示圖示的左风纠、右兩側。

@startuml
[-> A: DoWork

activate A

A -> A: Internal call
activate A

A ->] : << createRequest >>

A<--] : RequestCreated
deactivate A
[<- A: Done
deactivate A
@enduml

還可以使用下面的語法:

@startuml
[-> Bob
[o-> Bob
[o->o Bob
[x-> Bob

[<- Bob
[x<- Bob

Bob ->]
Bob ->o]
Bob o->o]
Bob ->x]

Bob <-]
Bob x<-]
@enduml

構造類型和圈點

可以使用 <<>>給參與者添加構造類型牢贸。

在構造類型中竹观,你可以使用(X,color)格式的語法添加一個圓圈圈起來的字符。

@startuml

participant "Famous Bob" as Bob << Generated >>
participant Alice << (C,#ADD1B2) Testable >>

Bob->Alice: First message

@enduml

默認使用 guillemet 字符來顯示構造類型潜索。 你可以使用外觀參數(shù) guillemet 來修改顯示行為臭增。

@startuml

skinparam guillemet false
participant "Famous Bob" as Bob << Generated >>
participant Alice << (C,#ADD1B2) Testable >>

Bob->Alice: First message

@enduml
@startuml

participant Bob << (C,#ADD1B2) >>
participant Alice << (C,#ADD1B2) >>

Bob->Alice: First message

@enduml

更多標題信息

你可以在標題中使用creole格式。

@startuml

title __Simple__ **communication** example

Alice -> Bob: Authentication Request
Bob -> Alice: Authentication Response

@enduml

在標題描述中使用 \n表示換行竹习。

@startuml

title __Simple__ communication example\non several lines

Alice -> Bob: Authentication Request
Bob -> Alice: Authentication Response

@enduml

還可以使用關鍵字 titleend title定義多行標題速址。

@startuml

title
 <u>Simple</u> communication example
 on <i>several</i> lines and using <font color=red>html</font>
 This is hosted by <img:sourceforge.jpg>
end title

Alice -> Bob: Authentication Request
Bob -> Alice: Authentication Response

@enduml

包裹參與者

可以使用 boxend box畫一個盒子將參與者包裹起來。

還可以在box關鍵字之后添加標題或者背景顏色。

@startuml

box "Internal Service" #LightBlue
    participant Bob
    participant Alice
end box
participant Other

Bob -> Alice : hello
Alice -> Other : hello

@enduml

移除腳注

使用 hide footbox關鍵字移除腳注篷店。

@startuml

hide footbox
title Footer removed

Alice -> Bob: Authentication Request
Bob --> Alice: Authentication Response

@enduml

外觀參數(shù)(skinparam)

使用 skinparam命令改變顏色和字體洽糟。
如下場景可以使用這一命令:

  • 在圖示定義中,
  • 在一個包含文件中,
  • 在由命令行或者ANT任務提供的配置文件中并炮。
    你也可以修改其他渲染元素,如以下示例:
@startuml
skinparam sequenceArrowThickness 2
skinparam roundcorner 20
skinparam maxmessagesize 60
skinparam sequenceParticipant underline

actor User
participant "First Class" as A
participant "Second Class" as B
participant "Last Class" as C

User -> A: DoWork
activate A

A -> B: Create Request
activate B

B -> C: DoWork
activate C
C --> B: WorkDone
destroy C

B --> A: Request Created
deactivate B

A --> User: Done
deactivate A

@enduml
@startuml
skinparam backgroundColor #EEEBDC
skinparam handwritten true

skinparam sequence {
    ArrowColor DeepSkyBlue
    ActorBorderColor DeepSkyBlue
    LifeLineBorderColor blue
    LifeLineBackgroundColor #A9DCDF

    ParticipantBorderColor DeepSkyBlue
    ParticipantBackgroundColor DodgerBlue
    ParticipantFontName Impact
    ParticipantFontSize 17
    ParticipantFontColor #A9DCDF

    ActorBackgroundColor aqua
    ActorFontColor DeepSkyBlue
    ActorFontSize 17
    ActorFontName Aapex
}

actor User
participant "First Class" as A
participant "Second Class" as B
participant "Last Class" as C

User -> A: DoWork
activate A

A -> B: Create Request
activate B

B -> C: DoWork
activate C
C --> B: WorkDone
destroy C

B --> A: Request Created
deactivate B

A --> User: Done
deactivate A

@enduml

填充區(qū)設置

可以設定填充區(qū)的參數(shù)配置甥郑。

@startuml
skinparam ParticipantPadding 20
skinparam BoxPadding 10

box "Foo1"
participant Alice1
participant Alice2
end box
box "Foo2"
participant Bob1
participant Bob2
end box
Alice1 -> Bob1 : hello
Alice1 -> Out : out
@enduml 
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末逃魄,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子澜搅,更是在濱河造成了極大的恐慌伍俘,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,858評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件勉躺,死亡現(xiàn)場離奇詭異癌瘾,居然都是意外死亡,警方通過查閱死者的電腦和手機饵溅,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評論 3 395
  • 文/潘曉璐 我一進店門妨退,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人蜕企,你說我怎么就攤上這事咬荷。” “怎么了轻掩?”我有些...
    開封第一講書人閱讀 165,282評論 0 356
  • 文/不壞的土叔 我叫張陵幸乒,是天一觀的道長。 經(jīng)常有香客問我唇牧,道長罕扎,這世上最難降的妖魔是什么基茵? 我笑而不...
    開封第一講書人閱讀 58,842評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮壳影,結果婚禮上拱层,老公的妹妹穿的比我還像新娘。我一直安慰自己宴咧,他們只是感情好根灯,可當我...
    茶點故事閱讀 67,857評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著掺栅,像睡著了一般烙肺。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上氧卧,一...
    開封第一講書人閱讀 51,679評論 1 305
  • 那天桃笙,我揣著相機與錄音,去河邊找鬼沙绝。 笑死搏明,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的闪檬。 我是一名探鬼主播星著,決...
    沈念sama閱讀 40,406評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼粗悯!你這毒婦竟也來了虚循?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,311評論 0 276
  • 序言:老撾萬榮一對情侶失蹤样傍,失蹤者是張志新(化名)和其女友劉穎横缔,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體衫哥,經(jīng)...
    沈念sama閱讀 45,767評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡茎刚,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了炕檩。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片斗蒋。...
    茶點故事閱讀 40,090評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖笛质,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情捞蚂,我是刑警寧澤妇押,帶...
    沈念sama閱讀 35,785評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站姓迅,受9級特大地震影響敲霍,放射性物質發(fā)生泄漏俊马。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,420評論 3 331
  • 文/蒙蒙 一肩杈、第九天 我趴在偏房一處隱蔽的房頂上張望柴我。 院中可真熱鬧,春花似錦扩然、人聲如沸艘儒。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽界睁。三九已至,卻和暖如春兵拢,著一層夾襖步出監(jiān)牢的瞬間翻斟,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評論 1 271
  • 我被黑心中介騙來泰國打工说铃, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留访惜,地道東北人。 一個月前我還...
    沈念sama閱讀 48,298評論 3 372
  • 正文 我出身青樓腻扇,卻偏偏與公主長得像疾牲,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子衙解,可洞房花燭夜當晚...
    茶點故事閱讀 45,033評論 2 355

推薦閱讀更多精彩內(nèi)容