plantuml, puml
UML
- 序列图, Sequence Diagram
- 用例图, Use Case Diagram
- 类图, Class Diagram
- 对象图, Object Diagram
- 活动图, Activity Diagram
- 组件图, Component Diagram
- 部署图, Deployment Diagram
- 状态图, State Diagram
- 时序图, Timing Diagram
非 UML 图
UML 图
时序图, Sequence Diagram
1
2
3
4
5
6
7
8
| @startuml
Alice -> Bob: Authentication Request
Bob --> Alice: Authentication Response
Alice -> Bob: Another authentication Request
Alice <-- Bob: Another authentication Response
Alice ->> Bob: async msg
@enduml
|
类图, Class Diagram
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
| @startuml
skinparam classFontColor red
class Foo
note left: parent
class Bar
Bar : String field0
Bar : String method0()
Foo<|--Bar
note left: child
abstract class Abstract0
Foo--|>Abstract0
interface Interface0
' 注意, 接口名和冒号之间必须用空格分隔
Interface0 : void method0()
@enduml
|
1
2
3
4
5
6
7
8
9
10
11
12
| @startuml
skinparam class {
BackgroundColor Lightblue
ArrowColor #0ACF97
BorderColor #d5d5d5
}
skinparam stereotypeCBackgroundColor YellowGreen
Class101 <|.. Class102
@enduml
|
活动图, Activity Diagram
1
2
3
4
5
6
7
8
9
10
11
12
13
| @startuml
!theme plain
start
if (foo?) then (yes)
:process0;
else (no)
:process1;
endif
stop
@enduml
|
组件图, Component Diagram
语法
1
2
3
4
5
6
| # 把组件显示成普通矩形
skinparam componentStyle rectangle
# 组件间横向距离
skinparam nodesep 10
# 组件间纵向距离
skinparam ranksep 10
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
| @startuml
skinparam componentStyle rectangle
skinparam nodesep 10
skinparam ranksep 10
skinparam ParticipantFontColor #A9DCDF
' comments line starts by single quote, 注释
[First component]
[Another component] as Comp2
component Comp3
component [Last\ncomponent] as Comp4
[component0] as c0 #ff0000
[<color:#ff0000>component1</color>] as c1
[component2] as c2
[component3] as c3
[component4] as c4
c0 -- c1
c0-[#00ff00]-c2
c1--c3
c0--c3
c2--c4
note left of c0
note0
end note
@enduml
|
部署图, Deployment Diagram
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| @startuml
circle 1
circle 2
circle 3
agent 4
1 -- 2
1 -- 3
1 -- 4
queue 5
4 -right- 5
5 -right-2
@enduml
|
状态图, State Diagram
1
2
3
4
5
6
7
8
9
10
| @startuml
[*] --> State1
State1 --> [*]
State1 : this is a string
State1 : this is another string
State1 -> State2
State2 --> [*]
@enduml
|
安装 graphviz
1
| sudo apt-get install -y graphviz
|
https://graphviz.org/download/
VS-Code扩展
使用PlantUML
vim foo.md
vs code 渲染 uml 的快捷键
ctrl + p> PlantUML: Preview Current Diagram
https://www.jianshu.com/p/ed0e979657f4
theme: plain,sandstone,sketchy-outline
线路径
添加隐藏行a -[hidden]- b
延长线a — b的长度 (更多破折号,更长的线)
指定行的首选方向 (a -left- b)
交换关联结束 (a – b→b – a)
更改定义的顺序 (订单 重要……有时候)
添加空白节点,背景/边框颜色设置为透明
plantuml server
https://hub.docker.com/r/plantuml/plantuml-server
1
2
3
4
5
6
7
| docker run -d \
--name plantuml \
-p 30001:8080 plantuml/plantuml-server:jetty-v1.2023.13
podman run -d \
--name plantuml \
-p 30001:8080 plantuml/plantuml-server:jetty-v1.2022.14
|
定义组件的相对位置
一种典型的方法是将一行标记为隐藏(hidden)
hidden只支持从左到右->
和从上到下的 -->
行,因此您需要相应地放置左侧和右侧(X <[hidden]- Y似乎不支持语法).
1
2
3
4
5
6
7
8
9
10
11
12
13
| @startuml
component JMM {
[heap]
[thread stack] as ts0
[thread stack] as ts1
[thread stack] as ts2
ts0 -[hidden]-> heap
ts1 -[hidden]-> heap
ts2 -[hidden]-> heap
}
@enduml
|
https://github.com/plantuml/plantuml-server
dot executable /opt/local/bin/dot File does not exist
思维导图 mind map
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| @startmindmap
* Debian
** Ubuntu
*** Linux Mint
*** Kubuntu
*** Lubuntu
*** KDE Neon
** LMDE
** SolydXK
** SteamOS
** Raspbian with a very long name
*** <s>Raspmbc</s> => OSMC
*** <s>Raspyfi</s> => Volumio
@endmindmap
|
color name
https://www.w3schools.com/colors/colors_names.asp
架构图, Archimate diagram
https://plantuml.com/zh/archimate-diagram
https://en.wikipedia.org/wiki/ArchiMate
1
2
3
4
5
6
7
8
9
10
11
12
| @startuml
archimate #Technology "VPN Server" as vpnServerA <<technology-device>>
rectangle GO #lightgreen
rectangle STOP #red
rectangle WAIT #orange
circle c0
circle c1
c0 -right- c1
@enduml
|
Differences of Component Diagrams and Deployment Diagrams
https://stackoverflow.com/questions/1558835/differences-of-component-diagrams-and-deployment-diagrams
Simply put, a Component diagram shows you how different elements of your system have been grouped together (into assemblies / dlls etc) - and the link between these components. A Deployment diagram takes you one step further and describes on which hardware elements do these components reside.
So for example, if “Utility.dll” is a component and say it is deployed on the Client Machine (hardware). Then, the Component Diagram of this system will show Utility and its link with other components in the system (say.. Customer / SQL Packages). Whereas, the Deployment Diagram will show the hardware configuration - DB Server / Web Server / Client Machine .. and Utility component will be placed into the Client Machine Node.
https://plantuml.com/