专栏名称: 芋道源码
纯 Java 源码分享公众号,目前有「Dubbo」「SpringCloud」「Java 并发」「RocketMQ」「Sharding-JDBC」「MyCAT」「Elastic-Job」「SkyWalking」「Spring」等等
目录
相关文章推荐
芋道源码  ·  Spring用到了哪些设计模式? ·  6 小时前  
芋道源码  ·  分库分表 带来了哪些问题? ·  昨天  
芋道源码  ·  这样画时序图,真香! ·  昨天  
芋道源码  ·  四种 API 架构风格 ·  2 天前  
Java编程精选  ·  雷军提出建议!他本人也曾是“受害者” ·  3 天前  
51好读  ›  专栏  ›  芋道源码

这样画时序图,真香!

芋道源码  · 公众号  · Java  · 2025-03-08 09:30

主要观点总结

本文主要介绍了PlantUML工具的使用及其特点,包括快速入门、时序图语法、完整实例以及总结。

关键观点总结

关键观点1: 什么是PlantUML

PlantUML是一个开源工具,允许用户用简单的文本描述来创建UML图,包括时序图、用例图、类图等。它的一大优势是图表完全用文本代码描述,可以嵌入到源代码中,方便版本控制和多人协作。

关键观点2: PlantUML的快速入门

为了便捷地使用PlantUML,许多流行的IDE和代码编辑器提供了集成PlantUML的插件,如Visual Studio Code、IntelliJ IDEA等。这些插件提供了实时预览、语法高亮和图表导出等功能,能帮助更快捷、更高效地画图。

关键观点3: PlantUML的时序图语法

PlantUML的时序图语法包括声明参与者、消息传递、生命线(Lifeline)与激活条(Activation Bar)、分组和替代、注释、颜色等。

关键观点4: PlantUML的实例应用

文章以一个登录系统的设计为例,展示了如何使用PlantUML绘制时序图,包括参与者、消息传递、激活条、分组等语法的实际应用。

关键观点5: 总结

文章最后总结了PlantUML的优点,如所见即所得的使用体验、适合版本控制和多人协同、强大的扩展性和灵活性等。


正文

👉 这是一个或许对你有用 的社群

🐱 一对一交流/面试小册/简历优化/求职解惑,欢迎加入 芋道快速开发平台 知识星球。 下面是星球提供的部分资料:

👉 这是一个或许对你有用的开源项目

国产 Star 破 10w+ 的开源项目,前端包括管理后台 + 微信小程序,后端支持单体和微服务架构。

功能涵盖 RBAC 权限、SaaS 多租户、数据权限、商城、支付、工作流、大屏报表、微信公众号、CRM 等等功能:

  • Boot 仓库:https://gitee.com/zhijiantianya/ruoyi-vue-pro
  • Cloud 仓库:https://gitee.com/zhijiantianya/yudao-cloud
  • 视频教程:https://doc.iocoder.cn
【国内首批】支持 JDK 21 + SpringBoot 3.2.2、JDK 8 + Spring Boot 2.7.18 双版本

来源:三分恶


引言

最近在做系统设计的时候,发现要画不少时序图,以前我用的最顺手的工具是draw.io,后来也尝试了语雀自带的画图工具,感觉画画简单的图还行,但是复杂一点的,就比较吃力了。

哎,这条线怎么又歪了?布局怎么又乱了?这个条怎么又对不齐了?……手忙脚乱才画好一张图,这时候我就想,有没有其它更专业的画图工具呢?大部分同事都在用Visio,辉哥给我推荐了PlantUML,说非常好用!这时候旁边来了一句—— “他就是装比!”

装比带我一个

还有这样的事?那我不能让他一个人都装了。

最开始看下官方文档,发现PlantUML类似MarkDown,似乎需要一点学习成本,简单用了一下,曲线还是挺平缓的,上手相当快!推荐大家也用一下试试。

基于 Spring Boot + MyBatis Plus + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能

  • 项目地址:https://github.com/YunaiV/ruoyi-vue-pro
  • 视频教程:https://doc.iocoder.cn/video/

一、什么是PlantUML?

PlantUML 是一个多功能组件,可快速、直接地创建图表。用户可以使用简单直观的语言起草各种图表。

PlantUML是一个开源工具,它允许我们用简单的文本描述来创建UML图,包括序列图、用例图、类图、对象图、活动图、组件图、部署图、状态图,以及我们今天要讲的时序图。

除了UML图之外,PlantUML 还支持一系列其他图表,例如JSON数据、YAML数据、EBNF图表、架构图等等。PlantUML的一大优势,是图表完全用文本代码描述,这就意味着它可以作为文档嵌入到源代码中,也非常方便版本控制和多人协作,不管是迭代设计、文档编写、系统建模,PlantUML都能胜任。

基于 Spring Cloud Alibaba + Gateway + Nacos + RocketMQ + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能

  • 项目地址:https://github.com/YunaiV/yudao-cloud
  • 视频教程:https://doc.iocoder.cn/video/

二、快速入门

PlantUML插件

为了便捷地使用PlantUML,许多流行的IDE和代码编辑器提供了集成PlantUML的插件,如Visual Studio Code、IntelliJ IDEA、Eclipse等。插件提供了实时预览、语法高亮和图表导出等功能,能帮助我们更快捷,更高效地画图,整体上IDEA的插件用起来体验最好,但是IDEA大家懂的,太占内存了,VS Code相对而言,用起来就会轻量很多。

  • IntelliJ IDEA:比如 "PlantUML integration" 可以让我们直接在 IDE 中查看和编辑 PlantUML 图表

    PlantUML integration
    • 插件使用效果
  • VS Code:https://marketplace.visualstudio.com/items?itemName=jebbs.plantuml

    • 插件市场:
  • 插件使用效果:

Hello World!

我们先来看个最简单的例子,通过 -> --> : 就可以在参与者之间传递消息,不用明确声明参与者。

@startuml
老张 -> 老王 : 老王,你好啊
老王--> 老张: 老张,你好啊

老张 -> 老王: 最近有空一起喝茶
老张 <-- 老王: OK
@enduml
hello

三、PlantUML时序图语法

接下来,我们看看PlantUML时序图的一些具体语法。

声明参与者

我们使用关键字participant 来声明参与者,就可以对该参与者进行更多的控制。声明的顺序就是默认的 显示顺序 。我们也可以用这些关键字来声明参与者,给参与者设置不同的形状。

  • actor(角色)
  • boundary(边界)
  • control(控制)
  • entity(实体)
  • database(数据库)
  • collections(集合)
  • queue(队列)

我们还可以通过 as 关键字重命名参与者。

@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
@enduml
参与者

默认的颜色比较单调,也可以通过 # 来设置参与者的颜色:

@startuml
actor Bob #blue
' The only difference between actor
'
and participant is the drawing
participant Alice #SkyBlue
participant "I have a really\nlong name" as L #00ff00

Alice->Bob: Authentication Request
Bob->Alice: Authentication Response
Bob->L: Log transaction
@enduml
上颜色的参与者

消息传递

在不同参与者之间,通过箭头+:来表示消息传递。

  • 同步消息:
A -> B: 同步消息文本
同步消息
  • 异步消息:由发送者A指向接收者B,表示A发送后不需要等待B立即处理。
A ->> B: 异步消息文本
异步消息
  • 返回消息:通常从接收者返回到发送者,标识一个回应。
A <-- B: 返回消息文本
返回消息
  • 自调用:一个参与者直接发送消息给自己,表示自我处理或运算。

    A ->A: 自调用
    自调用

生命线(Lifeline)与激活条(Activation Bar)

在时序图中,生命线表示对象在一段时间内的活动状态,也就是从参与者往下延伸的那条虚线。激活条用来表示参与者或对象在处理某个任务期间的活动状态,是生命线的一部分,矩形条形式出现。

  • 生命线的激活与撤销:可以用下面这些关键字来控制生命线的激活与撤销

    • activate: 显示参与者的活动状态开始
    • deactivate: 指示参与者的活动状态结束。
    • 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
生命线的嵌套与颜色
  • 自动激活:在发送消息时自动显示激活条。
A->B++: 激活B并发送消息
自动激活
  • 自动去激活:在接收回应时自动隐藏激活条。
A->B++: 激活B并发送消息
A <--B--: B去激活并回应消息
自动去激活

分组和替代

  • 分组:用于逻辑上分组一系列交互。
group 分组名
A -> B: 消息
...
end group
分组
  • 替代(Alt/Else):表示基于条件的替代执行流程。
alt 条件1
A -> B: 满足条件1的消息
else 条件2
A -> B: 满足条件2的消息
end
替代

注释

注释用于添加说明性文本。

  • 可以用note left of,note right of或note over来控制注释相对节点的位置,还可以通过修改背景色来高亮显示注释。
@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
注释

颜色

Choosing colors在 PlantUML 中,我们可以对时序图的各个元素自定义颜色,比如参与者(actors)、对象(objects)、激活条(activation bars)等,来让我们的时序图更加美观。在声明元素时,可以直接指定颜色,格式为#颜色代码。颜色代码可以是不同的形式:

  • 直接指定颜色:颜色代码可以是一个十六进制颜色值,也可以是预定义的颜色名称。






请到「今天看啥」查看全文