Markdown 时序图绘制详解

news2024/12/23 20:40:43

✍️作者简介:小北编程(专注于HarmonyOS、Android、Java、Web、TCP/IP等技术方向)
🐳博客主页: 开源中国、稀土掘金、51cto博客、博客园、知乎、简书、慕课网、CSDN
🔔如果文章对您有一定的帮助请👉关注✨、点赞👍、收藏📂、评论💬。
🔥如需转载请参考【转载须知】

文章目录

  • 一、前言
  • 二、基本语法
    • 2.1 参与者 Participants
    • 2.1 角色 Actors
    • 2.1 别名 Aliases
  • 三、箭头介绍
  • 四、消息(Messages)
  • 五、激活期(Activations)
  • 六、注解(Notes)
  • 七、循环(Loops)
  • 八、选择(Alt)
  • 九、可选(opt)
  • 十、并行(Par)
  • 十一、背景高亮Background Highlighting
  • 十二、注释
  • 十三、字符转义
  • 十四、使用场景及应用实例
  • 十伍、总结

一、前言

Markdown 的原生语法不支持绘制图形,但通过扩展模块,我们可以将一些格式化的文字渲染成我们需要的图形。常用的图形有 “流程图”、“时序图”、“类图”、“状态图”、“甘特图”、“饼图” 等。

本节将重点介绍如何通过 Mermaid 绘制「时序图」。

时序图 (Sequence Diagram) ,用来体现对象之间的时间顺序关系,可以表达出对象的交互过程,也就是 “从哪到哪” 的图形化描述。

二、基本语法

时序图Sequence Diagram是一种交互图,显示了流程如何彼此操作以及以什么顺序进行操作。

2.1 参与者 Participants

可以像上面第一个示例中一样隐式定义参与者。参与者或角色的渲染由定义中出现的顺序决定。有时,您可能希望以与参与者在第一条消息中显示的顺序不同的顺序显示参与者。可以通过执行以下操作来指定角色的出现顺序:

语法示例

```mermaid 
sequenceDiagram
    participant 小北
    participant 小宝
    小北->>小宝: 好啊,小宝!
    小宝->>小北: 你也好!
```

效果如下:

小北 小宝 好啊,小宝! 你也好! 小北 小宝

2.1 角色 Actors

如果你要使用角色符号而不是带有文本的矩形框表示参与者,则可以使用actor语句,如下所示:

语法示例

```mermaid 
sequenceDiagram
    actor 小北
    actor 小宝
    小北->>小宝: 你好,宝
    小宝->>小北: 你好,小北
```

效果如下:

小北 小宝 你好,宝 你好,小北 小北 小宝

2.1 别名 Aliases

角色可以以别名的形式定义一个方便输入的id:

语法示例

```mermaid 
sequenceDiagram
    participant M as 小北
    participant L as 老铁
    M->>L: 好啊,老铁!
    L->>M: 你也好!
```

效果如下:

小北 老铁 好啊,老铁! 你也好! 小北 老铁

三、箭头介绍

目前支持的箭头有6种:

类型描述
->无箭头实线
–>无箭头虚线
->>带箭头实线
–>>带箭头虚线
-x带×的实线
–x带×的虚线
-)带开放箭头的实线
–)带开放箭头的虚线

四、消息(Messages)

交互时一方对另一方的操作(比如接口调用)或传递出的信息。用单向箭头来表示——实线代表主动发出消息;虚线代表响应;末尾带「X」代表异步消息,无需等待回应。

[Actor][Arrow][Actor]:Message text

语法示例

```mermaid 
sequenceDiagram
	participant 老板L
	participant 员工A

	老板L ->> 员工A : “在这里我们是兄弟!”
	老板L -x 员工A : 画个饼
	员工A -->> 老板L : 怯怯地鼓掌
```

效果如下:

老板L 员工A “在这里我们是兄弟!” 画个饼 怯怯地鼓掌 老板L 员工A

消息语句格式为:<参与者> <箭头> <参与者> : <描述文本>。

五、激活期(Activations)

可以激活和停用角色。激活/停用可以显式声明:从消息接收方的时间线上标记一小段时间,表示对消息进行处理的时间间隔。

语法示例

```mermaid 
sequenceDiagram
	老板M ->> + 员工B : “不仅996,还要669!”
	员工B -->> - 老板M : 怯怯地鼓掌
	老板M ->> + 员工B : “悔创本司!”
	员工B -->> - 老板M : 怯怯地鼓掌
```

效果如下:

老板M 员工B “不仅996,还要669!” 怯怯地鼓掌 “悔创本司!” 怯怯地鼓掌 老板M 员工B

注意体会箭头符号后的 + 和 - 的使用方法和效果,它们相当于激活框的开关。

六、注解(Notes)

可以在序列图中添加注解。通过语法 Note [ right of | left of | over ] [Actor]:注解内容

语法示例

```mermaid 
sequenceDiagram
    participant 老马
    Note left of 老马: 对钱不感兴趣
    participant 小马
    Note right of 小马: 对脸不感兴趣
    Note over 老马,小马 : 对996感兴趣
```

效果如下:

老马 小马 对钱不感兴趣 对脸不感兴趣 对996感兴趣 老马 小马

七、循环(Loops)

在条件满足时,重复发出消息序列。(相当于编程语言中的 while 语句。)

语法示例

```mermaid 
sequenceDiagram
	网友 ->> + X宝 : 网购钟意的商品
	X宝 -->> - 网友 : 下单成功
	
	loop 一天七次
		网友 ->> + X宝 : 查看配送进度
		X宝 -->> - 网友 : 配送中
	end
```

效果如下:

网友 X宝 网购钟意的商品 下单成功 查看配送进度 配送中 loop [一天七次] 网友 X宝

八、选择(Alt)

在多个条件中作出判断,每个条件将对应不同的消息序列。(相当于 if 及 else if 语句。)

语法示例

```mermaid 
sequenceDiagram
	土豪 ->> 取款机 : 查询余额
	取款机 -->> 土豪 : 余额
	
	alt 余额 > 5000
		土豪 ->> 取款机 : 取上限值 5000 块
	else 100 < 余额 < 5000
		土豪 ->> 取款机 : 有多少取多少
	else 余额 < 100
		土豪 ->> 取款机 : 退卡
	end
	
	取款机 -->> 土豪 : 退卡
```

效果如下:

土豪 取款机 查询余额 余额 取上限值 5000 块 有多少取多少 退卡 alt [余额 > 5000] [100 < 余额 < 5000] [余额 < 100] 退卡 土豪 取款机

九、可选(opt)

在某条件满足时执行消息序列,否则不执行。相当于单个分支的 if 语句。
语法示例

```mermaid 
sequenceDiagram
	老板们 ->> 员工们 : 开始实行996
	
	opt 永不可能
		员工们 -->> 老板们 : 拒绝
	end
```

效果如下:

老板们 员工们 开始实行996 拒绝 opt [永不可能] 老板们 员工们

十、并行(Par)

将消息序列分成多个片段,这些片段并行执行。

语法示例

```mermaid 
sequenceDiagram
老板C ->> 员工C : 开始实行996

par 并行
	员工C ->> 员工C : 刷微博
and
	员工C ->> 员工C : 工作
and
	员工C ->> 员工C : 刷朋友圈
end

员工C -->> 老板C : 9点下班
```

效果如下:

老板C 员工C 开始实行996 刷微博 工作 刷朋友圈 par [并行] 9点下班 老板C 员工C

十一、背景高亮Background Highlighting

可以通过提供指定颜色的背景来突出动作流,通过下面的语法:
(颜色使用rgb和rgba语法定义)

基本语法

rect rgb(184, 76, 78)
... content ...
end

rect rgba(184, 76, 78, .1)
... content ...
end

语法示例

```mermaid 
sequenceDiagram
    participant 老马
    participant 老铁

    rect rgb(184, 76, 78)
    note right of 老马: 老马呼叫老铁
    老马->>+老铁: 好啊,老铁!
    rect rgb(42, 143, 244)
    老马->>+老铁: 老铁,听到我喊你吗?
    老铁-->>-老马: 老马,我听到了!
    end
    老铁-->>-老马: 我挺好!
    end
    老马 ->>+老铁: 今晚一起喝一杯?
    老铁 -->>-老马: 不见不散!
```

效果如下:

老马 老铁 老马呼叫老铁 好啊,老铁! 老铁,听到我喊你吗? 老马,我听到了! 我挺好! 今晚一起喝一杯? 不见不散! 老马 老铁

十二、注释

可以在时序图代码中写注释,解析器将忽略这些注释。注释需要写在单独的行,并且必须以 %% 开头。注释开始到下一个换行符之后的任何文本都将被视为注释,包括任何时序图语法。

语法示例

```mermaid 
sequenceDiagram
    老马->>老铁: 好啊,老铁!
    %% 这里是注释,图中不起作用
    老铁-->>老马: 好!
```

效果如下:

老马 老铁 好啊,老铁! 好! 老马 老铁

十三、字符转义

可以使用如下所示的语法转义字符:

语法示例

```mermaid 
sequenceDiagram
    老铁->>二丫: 我 #9829; 你!
    二丫->>老铁: 我 #9829; 你 #infin; 次!
```

效果如下:

老铁 二丫 我 ♥ 你! 我 ♥ 你 ∞ 次! 老铁 二丫

数字为十进制,因此 # 可以编码为 #35;。也支持使用HTML字符名称。
因为可以使用分号代替换行符来定义标记,所以你需要使用 #59; 在消息文本中表示分号。

十四、使用场景及应用实例

时序图作为展示对象交互顺序的工具,可以更直观的描述顺序及并发过程。学生使用教务系统时序图展示:

语法示例

```mermaid 
sequenceDiagram
    participant a as 学生
    participant b as 教务系统
    participant c as 课程
    participant d as 成绩
		opt 认证
        a->>b: 用户名/密码
    end
    a->>+b: 请求课程列表
    b->>+c: 获取课程列表
    c-->>-b: 返回课程列表
    b->>+d: 获取成绩信息
    d-->>-b: 返回成绩信息
    b-->>-a: 显示成绩
```

效果如下:

学生 教务系统 课程 成绩 用户名/密码 opt [认证] 请求课程列表 获取课程列表 返回课程列表 获取成绩信息 返回成绩信息 显示成绩 学生 教务系统 课程 成绩

十伍、总结

  • 时序图是用来描述交互过程的图形组合,描述了对象间的动态协作;
  • 时序图最核心的元素是对象、生命线和消息;
  • 我们可以通过判断、循环、并行描述复杂的消息传递及处理流程。

文章写作不易,您的支持是我最大的动力,请👉关注✨、点赞👍、收藏📂、评论💬。
请添加图片描述


无论是哪个阶段,坚持努力都是成功的关键。不要停下脚步,继续前行,即使前路崎岖,也请保持乐观和勇气。相信自己的能力,你所追求的目标定会在不久的将来实现。加油!

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

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

相关文章

消费增值模式:从五折购物到利润共享的商业逻辑

在当今的商业环境中&#xff0c;消费者和商家之间的关系已经不再是简单的买卖。如何让消费者在购物的同时&#xff0c;也能享受到更多的价值&#xff0c;成为了各大平台争相探索的焦点。近日&#xff0c;一种名为“消费增值模式”的创新逻辑正在引起广泛的关注。这一模式以产品…

iOS UI掉帧和卡顿优化解决方案记录

UI卡顿原理 在 VSync 信号到来后&#xff0c;系统图形服务会通过 CADisplayLink 等机制通知 App&#xff0c;App 主线程开始在 CPU 中计算显示内容&#xff0c;比如视图的创建、布局计算、图片解码、文本绘制等。随后 CPU 会将计算好的内容提交到 GPU 去&#xff0c;由 GPU 进行…

postman 简单测试(一)

1.postman官网 Postman API Platform 2.研究了一下postman 一些简单的功能&#xff0c;自己做个记录&#xff0c;同时希望能节约点测试时间。 2.1新建一个 collections 长期测的话&#xff0c;最好注册一个账号&#xff0c;开放更多功能。 2.2新建一个请求 后端要先搭建起来…

怎么将文件上传到linux系统

1.在虚拟机VMware上设置–选项-共享文件夹-启用 2.添加&#xff0c;依次选择【下一步】&#xff0c;浏览时&#xff0c;选择本机要上传的文件夹 3.勾上【启用此共享】&#xff0c;完成即可 4.在linux输入命令找到共享文件&#xff0c;共享的目录默认是/mnt/hgfs&#xff0…

QT上位机开发(MFC vs QT)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 在qt之前&#xff0c;上位机开发的主要方法就是mfc。后来出现了c#语言之后&#xff0c;上位机的开发就有一部分人转成了c#。这些开发都是在windows…

Java Chassis 3技术解密:多种序列化方式支持

原文链接&#xff1a;Java Chassis 3技术解密&#xff1a;多种序列化方式支持-云社区-华为云 打开一个简单的 REST 接口&#xff1a; RestSchema(schemaId "ProviderController") RequestMapping(path "/") public class ProviderController {PostMapp…

想提高阅读代码的效率?试试这些工具吧!| 京东云技术团队

1.前言 程序员间有句名言——“Talk is cheap, show me the code&#xff01;”源码的确相较于言语更接近程序真实的状态&#xff0c;包含了更多的一手信息。因此&#xff0c;无论是刚开始学习代码的小白还是久经沙场的代码大神&#xff0c;不管是学习优秀的开源项目还是做老项…

云服务器基于Centos创建个人云盘实践经验分享

文章目录 安装运行Cloudreve安装ossfscentos更换yum源 配置ossfs挂载oss存储配置开机启动 配置cloudreve推荐阅读 安装运行Cloudreve 执行如下命令&#xff0c;下载cloudreve安装包。 wget https://labfileapp.oss-cn-hangzhou.aliyuncs.com/cloudreve_3.3.1_linux_amd64.tar…

kkfileview Word文件预览乱码异常问题

kkfileview Word文件预览乱码异常问题 本篇文章以CentOS为例 这里处理的是服务器没有相关中文字体的解决方案 下载中文字体包 线上 http://kkfileview.keking.cn/fonts.zip上传服务器至目录/usr/share/fonts cd /usr/share/fonts将文件上传至该文件夹下&#xff0c;解压…

海康visionmaster-VM 嵌入:嵌入用户软件界面的方法

描述 环境&#xff1a;VM4.0.0 VS2015 及以上 现象&#xff1a;将 VM 整体嵌入到客户软件界面中&#xff1f; 解答 将 VM 软件整体嵌入到客户软件中&#xff0c;需要利用 Panel 控件&#xff0c;并且需要先启动 VM 软件&#xff0c;具 体代码如下&#xff1a; C# [DllImport(“…

Express框架使用全流程

1.目的和使用场景 对于像我这样不常使用 Node.js 进行开发的人来说&#xff0c;每次开始一个新项目都意味着从头开始设置环境&#xff0c;这个过程相当繁琐。因此&#xff0c;我决定自己构建一个开箱即用的项目脚手架。我的目标是创建一个简单易用的基础框架&#xff0c;能让我…

Html+Css+JavaScript实现完整的轮播图功能

概要 这个案例具备常见轮播图完整的功能&#xff0c;大家可以根据自己的需求去修改&#xff1b; 代码可以直接复制运行&#xff0c;需要安装sass 主要功能&#xff1a; &#xff08;1&#xff09;鼠标移入轮播图&#xff0c;左右两边的按钮出现&#xff0c;离开则隐藏按钮&a…

maven私有仓库和公有仓库混合使用

<?xml version"1.0" encoding"UTF-8"?> <settings xmlns"http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation"http://maven.apache.org/SETTINGS/1…

测量鼠标DPI的三种方法,总有一种适合你

DPI(dots per inch)代表每英寸点数,是一种用于各种技术设备(包括打印机)的测量方法,但对于鼠标来说,指的是鼠标在桌面上移动1英寸的距离的同时,鼠标光标能够在屏幕上移动多少“点”。 许多游戏鼠标都有按钮,可以让你在玩游戏时动态切换DPI,但如果你不知道鼠标的DPI怎…

黑马程序员——javase基础——day01——Java入门IDEA基础语法

目录&#xff1a; Java入门 Java简介JDK的下载和安装第一个程序常见问题常用DOS命令Path环境变量IDEA IDEA概述和安装IDEA中HelloWorldIDEA中基本配置&注释IDEA中常用快捷键IDEA中模块操作基础语法 字面量数据类型变量变量的案例 手机信息描述疫情防控信息采集表变量的注意…

引领未来:话务数据展示大屏助力企业决策

在当今信息爆炸的时代&#xff0c;企业需要一个直观、高效的数据展示平台来帮助他们快速获取、分析和决策。山海鲸可视化话务数据展示大屏&#xff0c;就是这样一款引领企业迈向高效决策新纪元的产品。 一、什么是山海鲸可视化话务数据展示大屏&#xff1f; 山海鲸可视化是一款…

Androidmanifest文件加固和对抗

前言 恶意软件为了不让我们很容易反编译一个apk&#xff0c;会对androidmanifest文件进行魔改加固&#xff0c;本文探索androidmanifest加固的常见手法以及对抗方法。这里提供一个恶意样本的androidmanifest.xml文件&#xff0c;我们学完之后可以动手实践。 1、Androidmanife…

LLM:Scaling Laws for Neural Language Models (中)

核心结论 1&#xff1a;LLM模型的性能主要与计算量C&#xff0c;模型参数量N和数据大小D三者相关&#xff0c;而与模型的具体结构 (层数/深度/宽度) 基本无关。三者满足: C ≈ 6ND 2. 为了提升模型性能&#xff0c;模型参数量N和数据大小D需要同步放大&#xff0c;但模型和数…

这三款内网管理监控软件让你事半功倍

在当今高度信息化的时代&#xff0c;企业内部网络&#xff08;内网&#xff09;已经成为企业运营和发展的重要支撑。 然而&#xff0c;随着内网规模的扩大和复杂性的增加&#xff0c;内网的管理和监控也变得越来越困难。 为了提高内网的管理效率和工作效率&#xff0c;许多企…

在Linux上使用PHP-FPM与Nginx实现高效的HTTP处理

当谈到高效的HTTP处理时&#xff0c;PHP-FPM&#xff08;FastCGI进程管理器&#xff09;与Nginx的结合是许多web开发者的首选。这种组合提供了出色的性能、可扩展性和稳定性&#xff0c;尤其适用于高流量的网站和应用程序。 1. 为什么选择PHP-FPM与Nginx&#xff1f; 性能优化…