plantuml 方法图_PlantUML 语法之时序图

plantUML 下载(含《plantUML语法指南手册》):http://plantuml.com/download

Visual Studio Code 安装 plantUML 插件,在插件应用商店中搜索:PlantUML,点击安装即可。

快捷键:

Alt + D 即可快速预览,Ctrl + Shift + P 即可快速调出命令面板,选择”导出当前文件图表”即可导出成图片或者svg文件。

安装 graphviz

使用 plantuml 画类图的时候还需要在 VS Code 中安装:Graphviz Preview, 如果还是不画类图,就需要安装graphviz。

下载zip 包,将zip包解压,并移动到固定目录(常用软件安装目录即可),复制graphviz 安装包目录下的 bin 目录下的 dot.exe文件的绝对路径,设置到系统的环境变量中:

在系统环境变量中曾加GRAPHVIZ_DOT的配置,重启 VS Code。

例如:dot运行文件路径是:D:\programs\graphviz\bin\dot.exe,在系统变量列表中创建一个:GRAPHVIZ_DOT:D:\programs\graphviz\bin\dot.exe 的键值对即可。

VS Code 默认是英文系统,可安装”Chinese (Simplified) Language”中文语言插件。

一、简单例子

消息流向使用 -> 表示, 此时绘制出实线箭头; --> 则绘制点线箭头。若要绘制反向消息流向, 可以使用

注意:没有显示申明模块的类型,默认是矩形图形模块,并且随着代码的书写顺序进行从左向右的展示。

1

2

3

4

5

6@startuml

模块1 -> 模块2: Authentication Request

模块2 --> 模块1: Authentication Response

模块1 -> 模块2: Another authentication Request

模块2

@enduml

二、申明例图(种类)

由 participant 声明的参与者的图形是一个矩形,还可以由其它关键字声明一个参与者,不同的关键字声明的参与绘制时使用的图形是不一样的:

participant

actor

boundary

control

entity

database

collections

1

2

3

4

5

6

7

8

9

10

11

12

13@startuml

actor 角色

boundary 分界

control 控制器

entity 数据对象

database 数据库

collections 集合

角色 -> 分界 : 发送到分界

角色 -> 控制器 : 发送到控制器

角色 -> 数据对象 : 发送到数据对象

角色 -> 数据库 : 发送到数据库

角色 -> 集合 : 发送到集合

@enduml

三、使用别名及背景颜色

别名

若参与者名称过长,特别是参与者名字由多个单词组成的情况下,可以使用关键字 as 给参与者取一个别名,之后就可以使用别名指代该参与者。

参与者背景色

在参与者名称之后以 #COLOR 的形式可以设定参与者图标的背景色。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16@startuml

actor 管理员 #red

' 定义颜色角色的背景颜色,以区别不用的元素

participant 服务1

' 定义别名

participant "请求日志" as R #99FF99

' 也可以下面这种方式定义别名

participant S as "响应日志" #99FF00

participant 服务2

服务1->服务2: 验证请求

服务1->R: 日志记录

服务2->服务1: 验证响应

服务2->S: 日志记录

@enduml

四、设置箭头颜色

在箭头语法中间以 [#COLOR] 的形式可以设置箭头颜色:

1

2

3

4

5

6

7@startuml

' 设置箭头颜色

服务1 -[#Red]-> 服务2: 发送请求 [虚线箭头]

'虚线箭头 -->

服务2 -[#Green]> 服务3: 发送请求 [实线箭头]

'实线箭头 ->

@enduml

五、设置箭头风格x. 将其放到箭头符号前或后,UML 中表示丢失消息.

使用 / 代替 > 或 使用 \ 代替

使用 //, >>, <

使用 -- 代替 - 将产生虚线.

在箭头或箭尾放置 o, 相应位置会绘制 ‘o’.

可以产生双向箭头

1

2

3

4

5

6

7

8

9

10

11

12@startuml

客户端 ->x 服务器

客户端 -> 服务器

客户端 ->> 服务器

客户端 -\ 服务器

客户端 \\- 服务器

客户端 //-- 服务器

客户端 ->o 服务器

客户端 o\\-- 服务器

客户端 服务器

客户端 o 服务器

@enduml

六、箭头给自己发消息

参与者可以给自己发消息

1

2

3

4

5

6@startuml

' 若消息很长, 可以使用 "\n" 换行.

' 消息默认是或对齐.

' 参与者名称则是默认中间对齐.

服务器 -> 服务器: 若消息很长, 可以使用 "\\n" 换行 \n 消息默认是或对齐 \n 参与者名称则是默认中间对齐

@enduml

七、消息自动编号autonumber 从 1 开始对消息自动编号

autonumber START从 START 开始对消息自动编号

autonumber START INCREMENT从 START 开始,按 增量 INCREMENT 对消息自动编号

1

2

3

4

5

6

7

8

9

10

11

12

13@startuml

autonumber

客户端 -> 服务器 : 第一次请求 [自动编号]

客户端

autonumber 15

客户端 -> 服务器 : 第二次请求 [从编号15开始, 自动编号]

客户端

autonumber 40 10

客户端 -> 服务器 : 第一次请求 [从编号40开始, 以 10 为单位自动编号]

客户端

@enduml

八、自定义消息编号样式1

2

3

4

5

6

7

8

9

10

11

12

13@startuml

autonumber "[000]"

客户端 -> 服务器 : 证请求 [编号带中括号及加粗样式]

客户端

autonumber 15 "(##)"

客户端 -> 服务器 : 验证请求 [编号带括号及下划线样式]

客户端

autonumber 40 10 "消息编号 0 "

客户端 -> 服务器 : 验证请求 [编号带红色及加粗样式]

客户端

@enduml

九、停止消息自动编号1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23@startuml

autonumber 10 10 "[000]"

客户端 -> 服务器 : 验证请求

客户端

autonumber stop

客户端 -> 服务器 : 停止自动编号后的消息

autonumber resume "消息编号 0 "

客户端 -> 服务器 : 另一个验证请求

客户端

autonumber stop

客户端 -> 服务器 : 停止自动编号后的消息

autonumber resume 1 "消息编号 0 "

客户端 -> 服务器 : 另一个验证请求

客户端

@enduml

十、消息分组

有时候可能需要对消息进行分组,那么可以使用下面的关键词来实现:

alt/else

opt

loop

par

break

critical

group, 这个关键词后面的文字会作为组名显示在图形上

上面的关键词后可以添加一些文本用来显示在头部(注:group 除外,因 为它后面的文本用来显示在组名称的位置)。

在组嵌套组的结构里可以用关 键词end来关闭组或者说是表示一个组符号的结束符(类似if/endif)。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20@startuml

客户端 -> 服务器 : 验证请求

alt 验证成功

客户端 -> 服务器 : 验证响应

else 验证失败 :第一种失败情况

客户端 -> 服务器 : 验证失败

group 自定义的分组情况

客户端 -> 日志服务 : 开始记录日志

loop 循环 1000 次

客户端 -> 服务器 : DNS 尝试

end

客户端 -> 日志服务 : 结束日志记录

end

else 验证失败:第二种失败情况

客户端 -> 服务器 : 要求客户端重新请求

end

@enduml

十一、消息注解

我们可能经常会在消息的左边或右边使用注解,要添加注解,只要使用 note left 或 note right 关键词就可以了。

1

2

3

4

5

6

7

8

9

10

11

12@startuml

客户端->服务器 : 请求

note left: 这是左侧注解

服务器 -->客户端 : 响应

note right: 这是右侧注解

服务器 ->服务器 : 业务流程处理

note left

注解

也可以多行编写

只需要使用 note 和 end note 即可

end note

@enduml

十二、其他注解方式

通过使用关键词 note left of , note right of 或 note over , 我们还可以把注解放置在与之相关的参与者的左边或右边,或下方。

通过改变注解的背景色,我们还可以高亮一个注解文本块。

如果要使用多行注解,可以使用关键词 end note 来表示注解的结束。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19@startuml

participant 客户端

participant 服务器

note left of 客户端 #aqua

这是相对客户端模块左侧的注解

end note

note right of 客户端: 这是相对客户端模块右侧的注解

note over 客户端: 这是相对客户端模块中间的注解

note over 客户端, 服务器 #FFAAAA: 这是相对\n 服务器和客户端之间的注解

note over 客户端, 服务器

这是换行的注解

使用 note 和 end note 组合

end note

@enduml

十三、最佳样式

默认样式颜色为黄色,组件块是上下对应的,这会产生更多的视觉噪音,因此去掉底部的重复并将颜色改为素色为好:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21@startuml

hide footbox

skinparam sequenceMessageAlign center

skinparam sequenceArrowFontSize 11

skinparam noteFontSize 11

skinparam monochrome true

skinparam lifelinestrategy solid

autonumber "[00]"

actor 角色

boundary 分界

control 控制器

entity 数据对象

database 数据库

collections 集合

角色 -> 分界 : 发送到分界

角色 -> 控制器 : 发送到控制器

角色 -> 数据对象 : 发送到数据对象

角色 -> 数据库 : 发送到数据库

角色 -> 集合 : 发送到集合

@enduml

参考资料:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/426894.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

运维实施面试题

记得不是很清楚了&#xff0c;大概回忆一下 1集线器&#xff0c;路由器。交换机的区别 术语解释   路由器&#xff1a;&#xff08;Router&#xff09;是连接因特网中各局域网、广域网的设备。在路由器中记录着路由表&#xff0c;它会根据信道的情况自动选择和设定路由&#…

CCF 201312-3 最大的矩形[比较简单]

问题描述 试题编号&#xff1a;201312-3试题名称&#xff1a;最大的矩形时间限制&#xff1a;1.0s内存限制&#xff1a;256.0MB问题描述&#xff1a; 问题描述在横轴上放了n个相邻的矩形&#xff0c;每个矩形的宽度是1&#xff0c;而第i&#xff08;1 ≤ i ≤ n&#xff09;个矩…

鸿蒙系统太烂,一加终于觉醒!变相承认系统太烂,魅族的吐槽一针见血

刘作虎宣布&#xff0c;一加9系列出厂预装ColorOS 11&#xff0c;终于证实了外界的猜想&#xff0c;一加终于也要放弃自己的系统&#xff0c;这已经证明了之前的氢系统已经在国内市场上彻底失败。想要收服用户&#xff0c;还是需要本土定制化的应用。不过这也显示出一加手机的决…

安卓开发toolbar设置logo_Android之ToolBar的使用

Toolbar是在 Android 5.0 开始推出的一个 Material Design 风格的导航控件 &#xff0c;Google 非常推荐大家使用 Toolbar 来作为Android客户端的导航栏&#xff0c;以此来取代之前的 Actionbar 。与 Actionbar 相比&#xff0c; Toolbar 明显要灵活的多。它不像 Actionbar 一样…

实例23:python

#题目&#xff1a;打印出如下图案&#xff08;菱形&#xff09;: * *** ***** #******* ***** *** * #先把图形分成两部分来看待&#xff0c;前四行一个规律&#xff0c;后三行一个规律&#xff0c;利用双重for循环&#xff0c;第一层控制行&#xff0c;第二层控制列。…

babel 用法及其 .babelrc 的配置详解,想做前端架构,拒绝一知半解...

Babel 官方介绍&#xff1a;将 ECMAScript 2015 及其版本以后的 javascript 代码转为旧版本浏览器或者是环境中向后兼容版本的 javascript 代码。 简而言之&#xff0c;就是把不兼容的 JavaScript 代码转为可兼容&#xff0c;可以执行的 JavaScript 代码。 功能&#xff1a; 语…

android 滚动尺画到控件中间,android 刻度尺控件实现

主要实现刻度尺的效果&#xff0c;能够快速滑动刻度&#xff0c;设置刻度间距&#xff0c;刻度值&#xff0c;滑动回调。简单易用效果图textureView控件的选择总结来说:1.view的绘制在主线程里面&#xff0c;频繁绘制会导致主线程阻塞2.我们知道一个surfaceview是异步绘制的&am…

实例24:python

#题目&#xff1a;有一分数序列&#xff1a;2/1&#xff0c;3/2&#xff0c;5/3&#xff0c;8/5&#xff0c;13/8&#xff0c;21/13…求出这个数列的前20项之和。 #!/usr/bin/python -- coding: UTF-8 -- a 2.0 b 1.0 s 0 for n in range(1,21): s a / b t a a a b b…

适合新手入门的8个python项目_推荐:一个适合于Python新手的入门练手项目

随着人工智能的兴起&#xff0c;国内掀起了一股Python学习热潮&#xff0c;入门级编程语言&#xff0c;大多选择Python&#xff0c;有经验的程序员&#xff0c;也开始学习Python&#xff0c;正所谓是人生苦短&#xff0c;我用Python有个Python入门练手项目&#xff0c;一直没有…

Luogu 4514 上帝造题的七分钟

二维差分树状数组。 定义差分数组$d_{i, j} a_{i, j} a_{i - 1, j - 1} - a_{i, j - 1} - a_{i - 1, j}$&#xff0c;有$a_{i, j} \sum_{x 1}^{i}\sum_{y 1}^{j}d_{i, j}$。 我们要求$sum(n, m) \sum_{i 1}^{n}\sum_{j 1}^{m}a_{i, j} $&#xff0c; 代入$a_{i, j}$&am…

jsp空白页面传html代码,echarts在HTML里测试一般,在jsp页面不显示,而且还把整个页面变成空白...

echarts在HTML里测试正常&#xff0c;在jsp页面不显示&#xff0c;而且还把整个页面变成空白echarts在HTML里测试正常&#xff0c;在jsp页面不显示&#xff0c;而且还把整个页面变成空白&#xff0c;请大神帮忙&#xff0c;急&#xff0c;在线等Created by IntelliJ IDEA.User:…

实例25:python

#题目&#xff1a;求12!3!…20!的和。 #!/usr/bin/python -- coding: UTF-8 -- n 0 s 0 t 1 for n in range(1,21): t * n s t print (‘1! 2! 3! … 20! %d’ % s)

mysql日期格式化季度_mysql按年度、季度、月度、周、日统计查询的sql语句

本文介绍一些mysql中用于查询的sql语句&#xff0c;包括按年度、季度、月度、周、日统计查询等&#xff0c;有需要的朋友&#xff0c;可以参考下。一、年度查询查询 本年度的数据SELECT *FROM blog_articleWHERE year( FROM_UNIXTIME( BlogCreateTime ) ) year( curdate( ))二…

html字体变大自动换行,网页css中实现字符超出宽度自动换行和英语字符不断行的解决方法...

需求&#xff1a;为了使英语字符不断开&#xff0c;我在显示内容的style是text-align:justify; text-justify:inter-ideograph。可是这样子在后台添加内容时&#xff0c;如果不是键盘输入的&#xff0c;而是copy到输入框里的话&#xff0c;这样前台显示出来的帖子内容会把表格撑…

Thread类中的join方法

package charpter06; //类实现接口public class Processor implements Runnable { // 重写接口方法 Override public void run() { for (int i 0; i < 100; i) { System.out.println(Thread.currentThread().getName() "*****************" i); } } } --------…

实例26:python

#题目&#xff1a;利用递归方法求5! #!/usr/bin/python -- coding: UTF-8 -- def fact(j):#定义一个函数 sum 0 if j 0: sum 1 else: sum j * fact(j - 1) return sum print (fact(5))

苹果地图副总裁_Amazon A9副总裁Benoit Dupin加入苹果,负责改善苹果地图搜索服务...

继挖角William Stasior 管理Siri之后&#xff0c;苹果最近又出手了&#xff0c;这一次&#xff0c;Amazon A9 搜索技术团队的副总裁 Benoit Dupin 将加入苹果&#xff0c;并负责改善苹果地图搜索服务。Benoit Dupin 2007年加入Amazon&#xff0c;主要负责搜索架构、用户体验等相…

[SimplePlayer] 2. 在屏幕上显示视频图像

我们这里采用SDL&#xff08;本文所用版本为SDL2.0.5&#xff09;来进行图像输出&#xff0c;SDL在进行图像渲染时一般采用的会是direct3D或者opengl&#xff0c;SDL对它们进行了封装&#xff0c;不过我们这里只讨论SDL的使用&#xff0c;并不会去涉及这些底层实现。尽管如此&a…

vb检测html事件,VB代码VB小程序:捕获 WebBrowser 控件的鼠标事件

49. 捕获 WebBrowser 控件的鼠标事件VB 的网页浏览控件 WebBrowser 没有 MouseDown、MouseMove、MouseUp 等鼠标事件&#xff0c;要在程序中捕获这些事件&#xff0c;必须另想办法。本文使用注入 java 脚本的方法来捕获控件的鼠标事件。另一更为有效的方法&#xff0c;可以捕获…

实例27:python

#题目&#xff1a;利用递归函数调用方式&#xff0c;将所输入的5个字符&#xff0c;以相反顺序打印出来。 #函数赋值两个变量 def output(s,l): if l0: return print (s[l-1]) output(s,l-1) s input(‘Input a string:’) l len(s) output(s,l)