用代码画时序图!YYDS

article/2025/10/7 2:14:32

前言

最近通过代码来画时序图,UML用例图,感觉很不错,所以给大家分享一下。

日常开发,一般在设计阶段,我们都需要画时序图、用例图等等。大家平时画图的时候,是用draw.io还是processOn呢?用它们画出的图,其实都很挺好看的。但是呢,今天田螺哥介绍一个款开源的画图神器!用代码就能画图,配合IDE使用,画图高效简单,信手拈来,还挺美观的。这个神器就是PlantUML

f7e60588fb4b4f5fe350b35b0b38b7ea.jpeg

1. PlantUML 简介

PlantUML是一个开源项目,可以快速编写UML图的工具。它可以支持编码的方式来生成图形。可以用来画时序图、UML用例图、类图、思维导图、ER图等等。

PlantUML 画出来的图,简洁美观,先给大家看看,一个用PlantUML画出来的登录时序图,以及对应画图的代码,如下:

/*** 关注公众号:键捡田螺的小男孩*/
@startuml
title Sequence Diagram of User login
actor User as userparticipant "gateway" as gateway
participant "user-core" as userCore
database "MySQL" as mysql
database "Redis" as redisautonumber
user-> gateway:login request,param:username,password
activate gateway
gateway-> userCore:forward the login request
activate userCore
userCore-> userCore :check the login param
userCore-> mysql:query user info from mysql by username
activate mysql
mysql-> userCore:response with username and password
deactivate mysql
userCore->userCore:compare the requested password with the DB's password
userCore-> userCore: generate an unique token
userCore--> redis: save the token to redis
userCore-> gateway: response with the token
deactivate userCore
gateway-> user: login success with the token
deactivate gateway
@enduml

登录用例时序图如下:

d33c03142393151542797212f632f6d4.png

2. PlantUML的安装使用

PlantUML的安装很方便的.有个插件,名字是:PlantUML Integration,大家可以去IDE的插件市场,搜索安装即可,如下:

744a1ea26836ffacf9995ed2bea54de7.jpeg

安装成功后,想快速体验一般的话.可以新建一个项目,然后新建一个plantUML File文件,然后把我上个小节,登录时序图那个代码复制进去,就可以看到登录时序图啦.

f5712f28a91ee0c9881dc0bd4585e278.jpeg
(如果是非时序图,希望即时展示,需要安装下Graphviz哈)

3.如何用PlantUML 画时序图

什么是时序图?

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

如何用PlantUML画时序图呢?

你可以先新建一个PlantUML文件

868779834738b6735cfbe56ccd322a34.jpeg

然后选择Sequence,并定义一个文件名称

b2adc1dc03118e2a6413cb68608331a1.jpeg

就会有默认的时序图生成啦.

77079831effd741fe426315451a4f863.jpeg

我们照着登录时序图的代码,来大概说下每个关键词的意思吧.

/*** 关注公众号:键捡田螺的小男孩*/
@startuml
title Sequence Diagram of User login
actor User as userparticipant "gateway" as gateway
participant "user-core" as userCore
database "MySQL" as mysql
database "Redis" as redisautonumber
user-> gateway:login request,param:username,password
activate gateway
gateway-> userCore:forward the login request
activate userCore
userCore-> userCore :check the login param
userCore-> mysql:query user info from mysql by username
activate mysql
mysql-> userCore:response with username and password
deactivate mysql
userCore->userCore:compare the requested password with the DB's password
userCore-> userCore: generate an unique token
userCore--> redis: save the token to redis
userCore-> gateway: response with the token
deactivate userCore
gateway-> user: login success with the token
deactivate gateway
@enduml

关键词解释如下:

  • title:表示该UML用例图的标题

  • actor:表示人形的参与者

  • as: 使用as 关键字命名参与者。你可以把它理解成定义变量一样,as后面跟着的就是变量,声明后,我们后面就可以使用这个变量啦

  • participant:表示普通的参与者,它跟actor的主要区别是:形状不一样

  • database:表示参与者形状是数据库.

  • 显示的顺序是怎么定义的:声明的参与者顺序将是(默认的)显示顺序。

  • autonumber:可以给参与者添加顺序

  • ->:表示绘制两个参与者之间的信息,如果你希望是虚线,可以使用-->.

  • activatedeactivate:表示参与者的生命线

当然,PlantUML功能挺丰富的,它还可以组合消息,虽然在我的登录时序图还没体现出来. 它提供了alt/else、opt、loop来组合消息.如下:

@startuml
Alice -> Bob: 认证请求alt 登录成功Bob -> Alice: 认证接受else 某种失败情况Bob -> Alice: 认证失败group 我自己的标签Alice -> Log : 开始记录攻击日志loop 1000次Alice -> Bob: DNS 攻击endAlice -> Log : 结束记录攻击日志endelse 另一种失败Bob -> Alice: 请重复end
@enduml

对应的时序图如下:

b02f1ccd173be5c638908ad218f2ca36.png

4. 如何用PlantUML 画UML用例图

什么是用例图?

用例图(英语:use case diagram)是用户与系统交互的最简表示形式,展现了用户和与他相关的用例之间的关系。通过用例图,人们可以获知系统不同种类的用户和用例。用例图也经常和其他图表配合使用。

如何用PlantUML画UML用例图呢?

你可以先新建一个PlantUML文件,然后选择user case,并定义个文件名

476292c3859fb9abd5644e8b1683d013.jpeg

就会有默认的UML用例图生成啦

c83c5ffdcb0558458697a7de47b5f43d.jpeg

我挑官网一个用例图demo来介绍吧,代码如下:

@startuml
left to right direction
actor Guest as g
package Professional {actor Chef as cactor "Food Critic" as fc
}
package Restaurant {usecase "Eat Food" as UC1usecase "Pay for Food" as UC2usecase "Drink" as UC3usecase "Review" as UC4
}
fc --> UC4
g --> UC1
g --> UC2
g --> UC3
@enduml

对应生成的用例图如下:

c066c7c93e6af8fdb0fad91cda3ea9e9.jpeg

来看下每个关键词的意思:

  • left to right direction:表示从左到右绘制用例图

  • actor Guest as g:定义一个人形参与者,变量别名是g.

  • package Professional:定义一个包package,名字为Professional.package可以用来对用例和角色分组.

  • usecase "Eat Food" as UC1:定义一个用例,别名为UC1.

  • fc --> UC4:表示角色fc和用例UC4关联起来.角色和用例之间的关系,用-->来表示。

5. 如何用plantUML 画思维导图

什么是思维导图?

英文是The Mind Map,又名心智导图,是表达发散性思维的有效图形思维工具 ,它简单却又很有效同时又很高效,是一种实用性的思维工具。

写了一个简单的思维导图,代码如下:

@startmindmap
* 公众号:捡田螺的小男孩,干货面试题
** 计算机网络面试题
*** TCP/IP十五连问
*** 两万字计算机面试题汇总
** MySQL面试题
** Redis面试题
** 大厂面试真题
*** 虾皮十五连问
*** 五年Oppo后端面试真题
*** 腾讯云十五连问
@endmindmap

plantUML画思维导图,还是挺简单的,大家可以看下效果

e5390cc792af4734941437cd39f7d25a.jpeg

6. 如何用planUML 画活动流程图

什么是活动图?

动态图(activity diagram,活动图)是阐明了业务用例实现的工作流程。

我画了一个简单版的登录活动流程图:

@startuml
title Activity Diagram of User loginstart
:user request login;
if (is request param null?) then (N):query user info by username;if (is user info  null ?) then (N):compare the password;if (Is password right?) then (Y):generate a token ,and set it to redis;:response with login success;else(N):response with wrong password code;stopendifelse(Y):response with error userinfo;stopendif
else(Y):response with error param;stopendif
stop
@enduml

生成的流程图如下:

634e73b171ba04d5d69fc187008db8cb.jpeg

活动图关键解释如下:

  • start表示活动图流程的开始

  • stop表示活动图流程的结束

  • :user request login;:表示活动流程节点为user request login,需要加:;的哈

  • if+then+endif表示一个完整的条件判断

推荐

Java面试题宝典

技术内卷群,一起来学习!!

27b8d1076078e57c75ebee2a35003d16.jpeg

PS:因为公众号平台更改了推送规则,如果不想错过内容,记得读完点一下“在看”,加个“星标”,这样每次新文章推送才会第一时间出现在你的订阅列表里。点“在看”支持我们吧!

d6381e42990d51f14918000ef4027825.gif


http://chatgpt.dhexx.cn/article/mXxLGrO6.shtml

相关文章

怎么用c语言写时序图,plc时序图怎么画_plc时序图编程方法

时序图是描述设备工作过程的时间次序图,也是用于直观分析设备工作过程的一种图形。如电子技术中的触发器、定时器、计数器等均用时序图来描述其工作原理。在plc顺序控制设计法编制梯形图程序时往往是先画出时序图,再根据时序图设计流程图,再按流程图编制梯形图程序。 一、pl…

画出属于你的最漂亮的数字时序图—WaveDrom

摘要:WaveDrom是一个免费开源的在线数字时序图渲染引擎。它可以使用JavaScript, HTML5和SVG来将时序图的WaveJSON描述转成SVG矢量图形,从而进行显示。WaveDrom可以嵌入到任何网页中。WaveDrom编辑器可在浏览器中运行,也可以安装在系统上&…

EA画时序图

1.步骤: 1. 新建一个项目; 2. Use Case Model右键-->添加图-->左边选择UML Behavioral,右边选择Sequence; 3. 选择工具栏中的工具,点击工具箱; 4. 拖放控件,常用的是Actor&#xff0c…

StarUML画时序图

1、先启动StarUML 左键点击左边工具栏中的工具,到右边空白处也左键单击即可画出相应图形,并且可以为图形命名

PowerDesigner16 画时序图教程

———————————————— 版权声明:本文为CSDN博主「猪脚踏浪」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/zsg88/article/details/78185049 文章转载于上…

时序图笔记

时序图(Sequence Diagram),又名序列图、循序图,是一种UML交互图 我们在画时序图时会涉及下面7种元素: 角色(Actor) 系统角色,可以是人或者其他系统和子系统。以一个小人图标表示。对象(Object) 对象位于时序图的顶部,以一个矩形…

时序图学习

时序图 时序图是很值的学习的,在梳理逻辑或者向领导汇报的时候很有用。我觉得以下两个时序图具有学习意义,一个是简洁版的,一个是复杂版的。各位可以参照这两个图来画自己公司的时序图。 微信登录时序图 微信支付时序图 参考: h…

【图形设计】手把手教你如何画好时序图

编辑导语:时序图可以有效地描述交互顺序,并帮助研发团队更清晰地理顺系统逻辑,做好流程分析,若利用得当,则可以一定程度上降低沟通成本,更快速地推进业务进行。本篇文章里,作者就时序图的构成与…

架构师必备:时序图说明及画法

用途 时序图(Sequence Diagram),又名序列图、循序图,是一种UML交互图。它通过描述对象之间发送消息的时间顺序显示多个对象之间的动态协作。它可以表示用例的行为顺序,当执行一个用例行为时,其中的…

记录一次帮公司搭建一次linux正式环境

安装JDK centos7 用yum安装java81.查看yum源中是否有相关套件yum -y list java*2.上图中可以看到有两个自己想用的套件,经过试验发现用yum install java-1.8.0-openjdk 时最后 /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.181-3.b13.el7_5.x86_6目录下只用一个jre文件&a…

Linux7启动MySQL失败_解决Linux-Centos7启动Mysql服务失败丢失mysql.sock问题

在新安装mysql后进行启动发现报错 mysql启动服务命令 Starting mysqld (via systemctl):? Job for mysqld.service failed because the control process exited with error code. See "systemctl status mysqld3306.service" and "journalctl -xe" for de…

Centos离线安装Mysql

一、tar.gz文件安装Mysql 5.7 官方参考文档:https://dev.mysql.com/doc/refman/5.7/en/binary-installation.html 1.下载tar.gz文件 官网:https://dev.mysql.com/downloads/mysql/5.7.html#downloads 根据需要选择64位or32位文件,下载完…

公司网站搭建的架构

目录 简介拓扑图需求首先先搭建好MHA集群跟新主机时间修改主机名配置所有主机之间SSH无密码验证将私钥发送到所有主机(包括本机)将下载好的软件包上传到主机配置本地yum源解压软件包在manager主机和各个node节点安装软件依赖包安装MHA manager依赖的perl…

Docker 部署 web 项目

本篇文章主要介绍将一个完整的 Web 项目(包括数据库、后端、前端)部署到 Docker 中的详细步骤 项目是前后端分离的,后端使用 SpringBoot JKD17 MySQL 8;前端使用 Vue webpack。服务器是跑在 WSL2 上的 Ubuntu 20.04.5 &#x1…

阿里巴巴 JAVA 开发手册

阿里巴巴 JAVA 开发手册 1.0.0 阿里巴巴集团技术部 2016.12.7 首次向 Java 业界公开 一、 编程规约(一) 命名规约1. 【强制】所有编程相关命名均不能以下划线或美元符号开始,也不能以下划线或美元符号结束。反例: _name / __name / $Object / name_ / …

2016阿里巴巴73款开源产品全向图

阿里巴巴集团已经开源 115 个项目,加入 FSF 基金会、Apache 基金会、Linux 基金会和 Xen 的顾问团队,并在云栖大会北京峰会宣布 AliSQL 开源。 为了让大家能更好,更全面的了解和应用上阿里开源项目, 云栖社区特别制作了一张“201…

mysql8.0 启动不了mysql_8.0.11版本Mysql遇到MySQL 服务无法启动的解决方法

转:https://blog.csdn.net/iyayaqiqi/article/details/80536110 系统环境:win10(1803),64位 MySQL版本:8.0.11免安装版 MySQL下载地址:https://dev.mysql.com/downloads/mysql,在下载页面往下拉,选择自己的…

CentOS下postgres怎么恢复数据库.bak文件_数据架构选型必读:4月数据库产品技术解析...

本期要点 DB-Engines数据库排行榜 一、RDBMS MySQL发布8.0.20版本,5.6版本于2021年2月停止更新DB2发布11.5.2版本,且看容器化是否可为DB2注入新活力PostgreSQL所有版本的小版本更新到最新版,停止维护9.4OceanBase发布2.2.5版本 二、NoSQL Red…

小麦苗的常用代码--常用命令(仅限自己使用)

小麦苗的常用代码--常用命令(仅限自己使用) 囗 ■ ☑ ● •◆ ※ ☆ ★ ⊙ √ → innobackupex --help -? -h helpy systeminfo | find "系统类型" ----- editplus 替换空行: ^[ \t]*\n EDIT -> DELETE->DELETE BLANK LINES ----- ed…

Spring+SpringMVC+Mybatis分布式敏捷开发系统架构(附源码)

前言 zheng项目不仅仅是一个开发架构,而是努力打造一套从 前端模板 - 基础框架 - 分布式架构 - 开源项目 - 持续集成 - 自动化部署 - 系统监测 - 无缝升级 的全方位J2EE企业级开发解决方案。 项目介绍 基于SpringSpringMVCMybatis分布式敏捷开发系统架构&#xff0c…