PlantUML
# PlantUML 概述
PlantUML是一款开源的UML图绘制工具,支持通过文本来生成图形,使用起来非常高效。它支持多种类型的UML图,包括时序图、类图、对象图、活动图、组件图、部署图、状态图等。
https://pdf.plantuml.net/1.2020.22/PlantUML_Language_Reference_Guide_en.pdf (opens new window)
https://plantuml.com/zh/ (opens new window)
https://plantuml.com/zh/class-diagram (opens new window)
# PlantUML 插件
IDEA 社区版安装 PlantUML 插件步骤:
- 打开 IDEA,通过顶部菜单栏依次点击 File → Settings (或使用快捷键
Ctrl + Alt + S) 打开设置界面。 - 在左侧面板中找到并点击 Plugins,然后在右侧切换到 Marketplace 选项卡。
- 在搜索框中输入 "PlantUML integration",从搜索结果中找到该插件并点击其右侧的 Install 按钮进行安装。
- 安装完成后,根据提示重启 IDEA 以激活插件。
# PlantUML 类图
# 访问修饰符
| 字符 | 图标(属性) | 图标(方法) | 可访问性 |
|---|---|---|---|
- | ![]() | ![]() | private 私有 |
# | ![]() | ![]() | protected 受保护 |
~ | ![]() | ![]() | package private 包内可见 |
+ | ![]() | ![]() | public 公有 |
# 元素声明
在PlantUML中,元素声明主要通过特定的语法规则来定义类、接口、枚举等UML组件及其属性和方法。
类的基本声明格式如下:
class 类名 {
访问修饰符 属性名称: 属性类型 = 默认值
访问修饰符 方法名称(参数列表): 返回类型
}
2
3
4
参数列表由一个或多个参数构成,多个参数之间用逗号分隔。
方法参数声明语法:
参数方向 参数名称: 参数类型
参数方向可以通过特定前缀来指定:
- in - 输入参数(默认,通常省略)
- out - 输出参数
- inout - 输入输出参数
在PlantUML中声明静态方法,需要在方法名前添加 {static} 修饰符。
访问修饰符 {static} 方法名称(参数列表): 返回类型
在PlantUML中声明抽象方法,需要在方法名前添加 {abstract} 修饰符。
访问修饰符 {abstract} 方法名称(参数列表): 返回类型
抽象类使用 abstract 关键字:
abstract class 抽象类名 {
// 属性和方法
}
2
3
接口使用 interface 关键字:
interface 接口名 {
// 属性和方法
}
2
3
枚举使用 enum 关键字:
enum 枚举名 {
值1
值2
值3
}
2
3
4
5
# 类之间的关系
类之间的关系是用以下符号定义的。
| 类型 | 符号 | 说明 |
|---|---|---|
| 继承关系(泛化/扩展) | <|-- 或 --|> | 空心三角形箭头指向父类 is-a关系,子类继承父类的特性和行为 |
| 实现 | <|.. 或 ..|> | 虚线空心三角形箭头指向接口 类实现接口定义的契约 |
| 组合 | *-- | 实心菱形指向整体 强拥有关系,部分对象的生命周期严格依赖整体对象,整体消失则部分必然消失(如“树”与“树叶”)。 |
| 聚合 | o-- | 空心菱形指向整体 弱拥有关系,部分对象可独立于整体存在,整体消失不影响部分(如“班级”与“学生”)。 |
| 关联 | --> | 实线箭头指向被关联的类 has-a关系,长期性的结构关系 关联关系表示类之间的结构化连接,耦合度较强。关联关系在代码中通常通过成员变量来实现,这种关系使得一个类能够知道另一个类的属性和方法。关联可以是单向的或双向的,具有相对稳定的特性。 |
| 依赖 | ..> | 虚线箭头指向被依赖的类 use-a关系,临时性的使用关系 依赖关系描述的是一种使用关系,耦合度较弱。依赖关系在代码中通常表现为局部变量、方法的参数、返回值或对静态方法的调用。依赖关系是临时的,仅在方法执行期间存在。 |
可以用.. 来代替-- ,会显示为虚线。
# PlantUML 时序图
# 参与者定义
participant 或 actor 声明对象,如 participant A 或 actor User。
支持多种类型:boundary(边界)、control(控制)、entity(实体)、database(数据库)等
# 消息传递
使用 -> 表示同步消息,--> 表示异步返回
示例:A -> B : 请求 或 B --> A : 响应。
# 生命线控制
activate 和 deactivate 标记对象活跃状态
A -> B : 消息
activate B
B --> A : 响应
deactivate B
2
3
4
# 注释信息
可以使用note left 或note right 关键字在信息后面加上注释。
可以使用end note 关键字有一个多行注释。
可以使用note left of,note right of或note over在节点(participant)的相对位置放置注释。
@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
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
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
30
31
# PlantUML 导出大图
PlantUML导出大图被截取和乱码解决方案:
在https://github.com/plantuml/plantuml/releases (opens new window)下载plantuml.jar,执行以下命令
java -DPLANTUML_LIMIT_SIZE=8192 -jar /path/to/plantuml.jar -charset UTF-8 /path/to/example.puml
参数说明:
-DPLANTUML_LIMIT_SIZE参数用于设置图像的宽高。如果图像很大,需要设置-Xml1024m参数。-charset UTF-8参数用于设定导出图像的编码。







