PlantUML:一款让你爽到起飞的高效代码绘制时序图工具

article/2025/9/1 14:12:19

背景

对于工作中遇到一些复杂的业务逻辑场景,需要借助图形工具去准确的表达,会更高效的理解和梳理复杂的逻辑,同时在跟领导和同事汇报时也更能清晰、准确、快速的表达想法以及方案。比如梳理源码常用的时序图以及流程图等,之前在画这些图都会想到使用processOn、Visio等,今天要介绍一款只要学会就会爱不释手,并且大大提高效率的代码绘图工具:PlantUML 绘制时序图。

PlantUML 介绍

PlantUML 是一个可以让你快速使用代码编写UML图的工具。它可以用来绘制时序图、流程图、用例图、ER图、类图以及思维导图等。
PlantUML 语法简单易学,一次学习,到处受用。现在很多主流的笔记工具已经支持PlantUML 工具,比如有道云笔记、语雀,可以直接使用PlantUML 语法绘图。
语雀的PlantUML支持

同时对于很多编程工具做了适配,比如常用的eclipse、idea 都有相对应的插件。如下图,idea中插件可以支持一边编辑一边预览,非常方便。

IDEA 中安装 PlantUML 插件

在 IDEA 中安装PlantUML比较方便,直接搜索 PlantUML Integration,选择下载,下载完成后重启 IDEA 安装完成。
idea PlantUML 插件下载
安装完成后,新建新的文件,会发现在新建列表上会多出一个 PlantUML File 选项,选择后创建文件,将一下代码复制进去,可以看到预览效果。

@startuml
autonumber
actor "用户" as User
participant "浏览器" as Browser
participant "服务端" as Server #orange
activate UserUser -> Browser: 输入 URL
activate BrowserBrowser -> Server: 请求服务器
activate ServerServer -> Server: 模板渲染
note right of Server: 这是一个注释Server -> Browser: 返回 HTML
deactivate ServerBrowser --> User
@enduml

idea 绘制 PlantUML 时序图
注意,如果要实时预览时序图外的图,比如流程图,需要安装 Graphviz 插件。

PlantUML 绘制时序图

时序图是什么?

时序图(Sequence Diagram),又名序列图、循序图,是一种UML交互图。它通过描述对象之间发送消息的时间顺序显示多个对象之间的动态协作。它可以表示用例的行为顺序,当执行一个用例行为时,其中的每条消息对应一个类操作或状态机中引起转换的触发事件。

基本用法

->来绘制参与者之间传递的消息,-->表示虚线。
各种箭头的写法:

@startuml
Bob ->x Alice
Bob -> Alice
Bob ->> Alice
Bob -\ Alice
Bob \\- Alice
Bob //-- AliceBob ->o Alice
Bob o\\-- AliceBob <-> Alice
Bob <->o Alice
@enduml

PlantUML 各种箭头的语法

关键字 autonumber用于自动对消息编号

@startuml
Alice -> Bob: Authentication Request
Bob --> Alice: Authentication ResponseAlice -> Bob: Another authentication Request
Alice <-- Bob: Another authentication Response
@enduml

PlantUML 自动编号语法

使用 as关键字来重新命名参与者,你可以把它理解成定义变量一样, as后面跟着的就是变量,声明后我们后面就可以使用这个变量了。
使用 order关键字来定制参与者的显示顺序,数字越小,越往前排。
使用 title关键字定义时序图的标题。
参与者后加上冒号(:),后面跟上当前连线上的说明。如果连线上的文本过长,可以使用 \n使长文本换行展示,不至于导致连线过长。

@startuml
title 测试PlantUML绘图
participant Last as L order 30
participant Middle as M order 20
participant First as F order 10F -> M: 开始到中间
L <-- M: 中间到最后
@enduml

PlantUML 语法示例

使用 activatedeactivate表示参与者的生命线。比如上面例子,如果加上参与者的生命线,一旦参与者被激活,生命线就会被显示出来,会变成这个样子。
destroy表示一个参与者的生命线的终结。

PlantUML 生命线表示方法

还可以使用嵌套的生命线,并且运行给生命线添加颜色。

PlantUML 给生命线添加颜色

上面例子可以看出,每次需要手写关键字激活,不是很方便,也可以使用自动激活关键字(autoactivate),这需要与 return关键字配合:

PlantUML 自动激活生命线

注意,return返回的点是导致最近一次激活生命线的点。

声明参与者

使用关键字 participant可以来声明参与者,默认使用长方形表示参与者,参与者如果没有明确指定类型,默认是 participant类型。
PlantUML 还预制了一些默认参与者,其形状不同。
actor(角色)
boundary(边界)
control(控制)
entity(实体)
database(数据库)
collections(集合)
queue(队列)

@startuml
participant Participant as Foo
actor       Actor       as Foo1
boundary    Boundary    as Foo2
control     Control     as Foo3
entity      Entity      as Foo4
database    Database    as Foo5
collections Collections as Foo6
queue       Queue       as Foo7
Foo -> Foo1 : To actor 
Foo -> Foo2 : To boundary
Foo -> Foo3 : To control
Foo -> Foo4 : To entity
Foo -> Foo5 : To database
Foo -> Foo6 : To collections
Foo -> Foo7: To queue
@enduml

PlantUML 各种参与者示例

分段以及分页

使用 ==关键字将时序图分割为不同的逻辑部分,方便阅读查看。
PlantUML 时序图逻辑分段
关键词 newpage可以将一张时序图分割成多张图,后面跟上标题表示当前页的标题,适用于长图分页打印的场景。
PlantUML 时序图分页示例

注释

可以使用 note leftnote right关键字在信息后面加上注释。
你可以使用 end note关键字有一个多行注释。
PlantUML 时序图注释示例

可以使用 note left ofnote right ofnote over在节点(participant)的相对位置放置注释。
还可以通过修改背景色来高亮显示注释。
PlantUML 时序图指定参与者示例

写在最后

本文主要介绍如何使用 PlantUML 绘制时序图,并对时序图中的一些关键字做讲解,有兴趣的朋友可以关注 PlantUML 官网。


http://chatgpt.dhexx.cn/article/4gLveFKv.shtml

相关文章

java时序图工具_开发必备的小工具,你用过几个?

今天就简单介绍一下平时用到的一些小工具.首先我平时是用IDEA开发的,所以下面的介绍都是和IDEA相关的.本文主要介绍我平时在哪些场景使用,使用了哪些功能,至于IDEA怎么安装插件和插件有哪些额外的功能,这些你把插件名字对着搜索引擎一搜就很多了. 1.SequenceDiagram 这个工具是…

信号波形时序图常用工具推荐

Refer: 下载&#xff1a;画时序图的四大神器_可编程器件-面包板社区 (eet-china.com) 软件工程师&#xff0c;习惯使用StarUML画Timing Diagram, 硬件工程师建议使用一下软件。 1、AndyTiming 免费的&#xff0c;这个有一个知乎的博文可以参考 https://zhuanlan.zhihu.com/p…

Java 静态代码块详解

文章目录 一、普通初始化块&#xff1a;二、静态代码块&#xff1a;三、多种代码块间的执行顺序 首先得知道什么是初始化块&#xff1a;就是类中得一段用大括号 {} 括起来得独立的代码空间。 而初始化块分成了 普通初始化块和 静态的初始化块&#xff08;也称为 静态代码块&…

java 代码块:静态代码块和非静态代码块

main方法是程序的入口&#xff0c;加入没有main方法程序无法启动&#xff0c;但是main方法不是第一个执行的。 我认为&#xff1a;在这个类加载时&#xff0c;编译器会找到main方法&#xff0c;从这里开始运行&#xff0c;但是当你把这个类加载的时候&#xff0c;静态代码块就…

java中代码块之静态代码块和非静态代码块

一、代码块&#xff1a; 语法&#xff1a;使用{}包裹的&#xff0c;可以在{}中写代码。 修饰符&#xff1a;static 或者不修饰。 static修饰的为静态代码代码块。 格式&#xff1a; //静态代码块&#xff0c;随着类的加载児执行static{System.out.println("这是静态代码块…

Java~~静态代码块

1. 可以使用static关键字来定义“静态代码块”&#xff1a; &#xff08;1&#xff09;语法格式&#xff1a; static{ java语句&#xff1b; } &#xff08;2&#xff09;静态代码块在类加载时执行&#xff0c;并且只执行一次。 &#xff08;3&#xff09;静态代码块在一个类…

java非静态代码块和静态代码块介绍

代码块 SE.10.0…02.28 非静态普通代码块&#xff1a;定义在方法内部的代码块&#xff0c;不用任何关键字修饰&#xff0c;又名构造代码块、实例代码块 静态代码块&#xff1a;用static修饰的代码块 非静态代码块 public class Test {public static void main(String[] args…

static静态代码块

static静态代码块 public class Person {// 静态代码块:在类加载时候执行静态代码块&#xff0c;只会执行一次static {System.out.println("Person.static initializer");}// 实例初始化块&#xff0c;每次调用构造方法之前首先调用实例初始化块{System.out.println…

java静态代码块

今天涉及到一个表需要加字段来关联另一张表的需求&#xff0c;考虑到项目已经上线&#xff0c;这个表又跟很多表联系&#xff0c;就想到了使用静态代码块去new一个Map来存放关联的字段&#xff0c;当然这是少量数据的表&#xff0c;大表的话还得考虑创建字典表了。 public sta…

静态代码块

在Java类中&#xff0c;使用static关键字修饰的代码块称为静态代码块 当类被加载的时候&#xff0c;静态代码块就会被执行 由于类只会加载一次&#xff0c;所以静态代码块只会执行一次 在程序当中&#xff0c;使用静态代码块对类的成员变量进行初始化 package qmfx2; publi…

代码块(静态代码块和非静态代码块)(重难点)

1 基本介绍 代码化块又称为初始化块,属于类中的成员[即是类的一部分]&#xff0c;类似于方法&#xff0c;将逻辑语句封装在方法体中&#xff0c;通过{}包围起来。 但和方法不同&#xff0c;没有方法名&#xff0c;没有返回&#xff0c;没有参数&#xff0c;只有方法体&#xff…

分布式与集群的区别是什么?

在IDF05&#xff08;Intel Developer Forum 2005&#xff09;上&#xff0c;Intel首席执行官Craig Barrett就取消4GHz芯片计划一事&#xff0c;半开玩笑当众单膝下跪致歉&#xff0c;给广大软件开发者一个明显的信号&#xff0c;单纯依靠垂直提升硬件性能来提高系统性能的时代已…

分布式和集群的架构套路总结

本文成于2020年3月14日 参考&#xff1a;原文 文章目录 分布式和集群名词解释使用分布式的心路历程常见的分布式集群架构1. 纯负载均衡形式(集群方向)2. 领导选举型(分布式方向)3. 区块链型(分布式方向)4. master-slaver型(分布式方向)5. 规则型一致性Hash 分布式和集群名词解释…

分布式和集群的区别是什么?

分布式是指将不同功能&#xff0c;或不同地点&#xff0c;或拥有不同数据的多台计算机通过网络连接起来&#xff0c;由控制系统统一管理&#xff0c;完成大规模信息处理的计算机系统。 集群是指将多台服务器集中在一起提供同一种服务&#xff0c;在逻辑上可以看做是一台服务器…

集群、分布式、微服务的区别和介绍

目录 一、集群的概念 二、为什么要使用集群&#xff1f; 1、集群的特点 2、集群的优势 3、集群分类及不同分类的特点 三、集群分类介绍 1、负载均衡集群 2、高可用性集群 3、高性能计算集群 四、集群与分布式区别 1、分布式图解 2、集群模式图解 五、分布式与微服…

理解分布式和集群的区别

简单理解&#xff1a; 分布式&#xff1a;一个业务分拆多个子业务&#xff0c;部署在不同的服务器上 集群&#xff1a;同一个业务&#xff0c;部署在多个服务器上 一句话&#xff0c;就是&#xff1a;“分头做事”与“一堆人”的区别 图文理解&#xff1a; 详细理解&#x…

什么是分布式和集群?

漫小画 擅长漫话 程小员 擅长编程 某天&#xff0c;下班较早&#xff0c;我正在玩吃鸡&#xff0c;已经到决赛圈了&#xff0c;这时候&#xff0c;女朋友满脸求知欲的朝我走过来。 上次他们都说你给我讲的面向对象太简单了。 那你想怎样&#xff1f;为什么我一玩游戏你就过来问…

分布式和集群区别与分布式的应用场景

分布式是指将一个业务拆分不同的子业务&#xff0c;分布在不同的机器上执行&#xff0c;集群是指多台服务器集中在一起&#xff0c;实现同一业务&#xff0c;可以视为一台计算机&#xff0c;一个云计算平台&#xff0c;就是通过一套软件系统把分布式部署的资源集中调度使用。要…

java集群和分布式 区别_集群和分布式的区别?

集群和分布式有什么区别&#xff1f; 分布式系统&#xff1a; 分布式系统(distributed system)是建立在网络之上的软件系统。正是因为软件的特性&#xff0c;所以分布式系统具有高度的内聚性和透明性。因此&#xff0c;网络和分布式系统之间的区别更多的在于高层软件(特别是操作…

分布式和集群的区别

分布式和集群的区别 分布式 分布式就是将多台服务器集中在一起&#xff0c;每台服务器都实现总体中的不同业务。每台服务器都缺一不可&#xff0c;如果某台服务器发生宕机了&#xff0c;则网站的 部分功能缺失&#xff0c;将导致整体无法运行。 分布式存在的作用主要是将应用…