PlantUML画图软件简介

562 阅读3分钟

PlantUML

简述:PlantUML是一个可以让你快速编写UML图的组件

时序图

时序图(Sequence Diagram),是一种UML交互图。它通过描述对象之间发送消息的时间顺序显示多个对象之间的动态协作。

你可以用-> 来绘制参与者之间传递的消息,而不必显式地声明参与者。 你也可以使用 --> 绘制一个虚线箭头。 另外,你还能用 <- 和 <--,这不影响绘图,但可以提高可读性。注意:仅适用于时序图,对于其它示意 图,规则是不同的。

示例:

@startuml
用户 -> 认证中心: 登录操作
认证中心 -> 缓存: 存放(key=token+ip,value=token)token
用户 <- 认证中心 : 认证成功返回token
用户 -> 认证中心: 下次访问头部携带token认证
认证中心 <- 缓存: key=token+ip获取token
其他服务 <- 认证中心: 存在且校验成功则跳转到用户请求的其他服务
其他服务 -> 用户: 信息
@enduml

image-20230207204850808.png

用例图

用例图(Usecase Diagram)是用户与系统交互的最简表示形式,主要用于展现用户和与他相关的用例之间的关系。通过用例图,我们可以很方便地表示出系统中各个角色与用例之间的关系。

用例用圆括号括起来(两个圆括号看起来就像椭圆)。 也可以用关键字 usecase 来定义用例。还可以用关键字 as 定义一个别名,这个别名可以在以后定义关 系的时候使用。

示例

@startuml
User -> (Start)
User --> (Use the application) : A small label
:Main Admin: ---> (Use the application) : This is\nyet another\nlabel
@enduml

image-20230207205320061.png

类图

类图(Class Diagram)可以表示类的静态结构,比如类中包含的属性和方法,还有类的继承结构。

示例

'在标签的开始或结束位置添加 < 或 > 以表明是哪个对象作用到哪个对象上。
@startuml
class Car
Driver - Car : drives >
Car *- Wheel : have 4 >
Car -- Person : < owns
@enduml

image-20230207205901292.png

活动图

活动图(Activity Diagram)通常用于表示业务流程,比如电商中的下单流程,例如电商项目中购物车中生成确认单的流程。

使用 (*) 作为活动图的开始点和结束点。 有时,你可能想用 (*top) 强制开始点位于图示的顶端。 使用--> 绘制箭头。

示例

@startuml
(*) --> "First Activity"
-->[You can put also labels] "Second Activity"
--> (*)
@enduml

image-20230207210252477.png

状态图

状态图被用来对系统的行为进行抽象描述。这种行为被表示为一系列的事件,可以在一个或多个可能的状态下发生。

示例

'使用([*])绘制状态图的起点或终点。
'使用-->添加箭头。
@startuml
hide empty description
[*] --> 状态1
状态1 --> [*]
状态1 : 这是一段字符串
状态1 : 这是另一段字符串
​
状态1 -> 状态2
状态2 --> [*]
@enduml

image-20230207210536589.png

定时图

定时图可以显示每个时间段变化情况

关键词描述
analog模拟信号的变化是连续的,其值在给定值之间会进行线性插值。
binary二进制信号,只有两个状态。 (binary)
clock时钟信号 ,即从高电平到低电平反复转换的信号,需要用period设置周期。可选的参数还有脉冲时长pulse和偏移量offset
concise简明的图形化数据表示,可表示数据的移动(非常适合表示信息)。
robust用信号线表示的状态,便于呈现状态间的转化(可设置多种状态)。

示例

'通过 @ 标注, 和 is 动词定义状态.
@startuml
robust "Web 浏览器" as WB
concise "Web 用户" as WU
​
@0
WU is 空闲
WB is 空闲
​
@100
WU is 等待中
WB is 处理中
​
@300
WB is 等待中
@enduml

image-20230207210915191.png

网络图

网络图用于绘制网络拓扑

示例

@startuml
nwdiag {
  network dmz {
      address = "210.x.x.x/24"
​
      web01 [address = "210.x.x.1"];
      web02 [address = "210.x.x.2"];
  }
  network internal {
      address = "172.x.x.x/24";
​
      web01 [address = "172.x.x.1"];
      web02 [address = "172.x.x.2"];
      db01;
      db02;
  }
}
@enduml
​

image-20230207211045660.png

思维导图

有好几种兼容其他语法的写法。

示例

'兼容OrgMode语法
@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
​
'兼容MarkDown语法
@startmindmap
* root node
	* some first level node
		* second level node
		* another second level node
	* another first level node
@endmindmap

image-20230207211323625.png

部署图

声明元素

@startuml
actor actor
agent agent
artifact artifact
boundary boundary
card card
cloud cloud
component component
control control
database database
entity entity
file file
folder folder
frame frame
interface  interface
node node
package package
queue queue
stack stack
rectangle rectangle
storage storage
usecase usecase
@enduml

image-20230207211711189.png

示例

'构造一个架构图
@startuml

node node1
node node2
node node3
node node4
node node5
node1 -- node2 : label1
node1 .. node3 : label2
node1 ~~ node4 : label3
node1 == node5

@enduml

image-20230207211825031.png

展示JSON数据

示例

@startjson
{
   "fruit":"Apple",
   "size":"Large",
   "color": ["Red", "Green"]
}
@endjson

image-20230207211937075.png

展示yanl数据

示例

@startyaml
fruit: Apple
size: Large
color: 
  - Red
  - Green
@endyaml

image-20230207212027848.png