markdown mermaid序列图
序列图(时序图)
序列图是一种交互图,它显示了进程如何相互操作以及按什么顺序操作。
sequenceDiagram
participant l as 大灰狼
participant y as 小羊
l->>y:小坏蛋,弄脏我喝的水
y->>l:狼先生,你在上游,我在下游
l->>y:听说去年你说我的坏话
y->>l:去年我还没出生呢
l->>y:不是你也是你爸爸,说着就扑上去
%% left or right
note left of l:对于坏人来说,<br>想做坏事总是有理由的。
participant l as 大灰狼
participant y as 小羊
l->>y:小坏蛋,弄脏我喝的水
y->>l:狼先生,你在上游,我在下游
l->>y:听说去年你说我的坏话
y->>l:去年我还没出生呢
l->>y:不是你也是你爸爸,说着就扑上去
%% left or right
note left of l:对于坏人来说,<br>想做坏事总是有理由的。
基本语法
sequenceDiagram
participant A as Mr Black :参与者声明(除非需要定义一个简单的别名否则无需声明)
[Actor][Arrow][Actor]:Message text
- 参与者:participant
参与者默认为participant,所以一般无需显示声明,但当参与者字符比较长时,可以通过显示声明定义一个简单别名,这样可以减少敲键盘的次数。
sequenceDiagram
participant A as Mr Black
participant B as Tom Cat
A->>B:Hello.How are you!
B->>A:I am fine ,thank you.
participant A as Mr Black
participant B as Tom Cat
A->>B:Hello.How are you!
B->>A:I am fine ,thank you.
- 参与者:actor(由于版本较高,很多mrkdown编辑器不支持,所以就一笔掠过)
如果你特别想使用actor符号而不是带有文本的矩形,你可以使用actor声明参与者。
sequenceDiagram
actor Alice
actor Bob
Alice->>Bob: Hi Bob
Bob->>Alice: Hi Alic
别名
参与者可以有方便的标识符和描述性标示,也就是别名。参与者名称太长的话,就可以用别名来代替。
sequenceDiagram
participant T as Tom
participant C as Cat
T->C: Hello Cat, how are you?
C->>T: Great!
participant T as Tom
participant C as Cat
T->C: Hello Cat, how are you?
C->>T: Great!
连接和箭头类型
| 类型 | 描述 |
|---|---|
| -> | 实线无箭头 |
| --> | 虚线无箭头 |
| ->> | 实线有箭头 |
| -->> | 虚线有箭头 |
| -x | 实线交叉箭头 |
| --x | 虚线交叉箭头 |
| -) | Solid line with an open arrow at the end (async) 版本太高多数markdown编辑器不支持。 |
| --) | Dotted line with a open arrow at the end (async) 版本太高多数markdown编辑器不支持 |
sequenceDiagram
participant A as Tom
participant B as Cat
note left of A: 测试线形状和箭头
A->B:吃饭了吗?
B->>A:吃了。
A-->B:快过年了,回家不?
B-->>A:新冠肺炎这么严重,回不了。
A-xB:是啊,回去还得隔离14天。
B--xA:我靠,隔离14天,假期都没有那么多。
participant A as Tom
participant B as Cat
note left of A: 测试线形状和箭头
A->B:吃饭了吗?
B->>A:吃了。
A-->B:快过年了,回家不?
B-->>A:新冠肺炎这么严重,回不了。
A-xB:是啊,回去还得隔离14天。
B--xA:我靠,隔离14天,假期都没有那么多。
%%A-) B:hello
%%B--)A:ok
活动
让一个参与者处于活动状态中.通过激活(activate)和取消激活(deactivate)一个参与者来实现.
sequenceDiagram
participant t as 数学老师
participant s as 高斯
t->>s:出一个题目:<br>1+2+3+...+100=?
activate s
s-->>s:我想想。小case
s->>t:1+2+3+...+100=5050
deactivate s
t-->>s:0-0,聪明呀。
s--xt: *_*
participant t as 数学老师
participant s as 高斯
t->>s:出一个题目:<br>1+2+3+...+100=?
activate s
s-->>s:我想想。小case
s->>t:1+2+3+...+100=5050
deactivate s
t-->>s:0-0,聪明呀。
s--xt: *_*
也可以通过在消息箭头上附加 +/- 后缀的快捷表示法(推荐,这种方式更简练):
sequenceDiagram
participant t as 数学老师
participant s as 高斯
t->>+s:出一个题目:<br>1+2+3+...+100=?
s-->>s:我想想。小case
s->>-t:1+2+3+...+100=5050
t-->>s:0-0,聪明呀。
s--xt: *_*
participant t as 数学老师
participant s as 高斯
t->>+s:出一个题目:<br>1+2+3+...+100=?
s-->>s:我想想。小case
s->>-t:1+2+3+...+100=5050
t-->>s:0-0,聪明呀。
s--xt: *_*
注释
可以向序列图添加注释。语法如下:
Note [ right of | left of | over ] [Paticipant]: Text in note content
eg:
sequenceDiagram
participant l as 大灰狼
participant y as 小羊
participant d as 小狗大侠
%% left or right
Note left of l:对于坏人来说,<br>想做坏事总是有理由的。
Note right of y:对于坏人的对策:干或者躲。
Note over d:游侠仗义,路见不平一声吼。
participant l as 大灰狼
participant y as 小羊
participant d as 小狗大侠
%% left or right
note left of l:对于坏人来说,<br>想做坏事总是有理由的。
note right of y:对于坏人的对策:干或者躲。
note over d:游侠仗义,路见不平一声吼。
跨越2个参与者的注释(最多2个)
语法:
Note [ right of | left of | over ] [Paticipant,Participant]: Text in note content
eg:
sequenceDiagram
participant l as 大灰狼
participant y as 小羊
participant d as 小狗大侠
%% left or right
note left of l:对于坏人来说,<br>想做坏事总是有理由的。<br>羊肉鲜美呀。
note over d,y:羊妹妹,莫怕。
Note over l,d:狗哥我路见不平一声吼,大灰狼你赶快给我走
participant l as 大灰狼
participant y as 小羊
participant d as 小狗大侠
%% left or right
note left of l:对于坏人来说,<br>想做坏事总是有理由的。<br>羊肉鲜美呀。
note over d,y:羊妹妹,莫怕。
Note over l,d:狗哥我路见不平一声吼,大灰狼你赶快给我走。
循环
可以在序列图中表示循环。语法如下:
loop Loop text
... statements ...
end
eg:
sequenceDiagram
participant t as 先生
participant s as 书生
participant k as 礼部
loop 十年寒窗
t->>+ s:教
s-->>s:学习&思考
s->>-t:问
end
s->>+k:进京赶考,参加秋闱
k-->>k:出难题,为国选材
k->>-s:不负有心人<br>状元及第
loop 巡游一天
s-->>s:春风得意马蹄疾,<br>一日看尽长安花。
end
participant t as 先生
participant s as 书生
participant k as 礼部
loop 十年寒窗
t->>+ s:教
s-->>s:学习&思考
s->>-t:问
end
s->>+k:进京赶考,参加秋闱
k-->>k:出难题,为国选材
k->>-s:不负有心人<br>状元及第
loop 巡游一天
s-->>s:春风得意马蹄疾,<br>一日看尽长安花。
end
路线选择
可以在序列图中表示选择路径。 语法如下:
alt Describing text
... statements ...
else Describing text
... statements ...
end
其他以外的选项
opt Describing text
... statements ...
end
eg:
sequenceDiagram
participant s as 贡士
participant d as 殿试
s->> d:参加殿试
alt 一甲
d->>s:进士及第
else 二甲
d->>s:进士出身
else 三甲
d->>s:同进士出身
end
opt 不在其中
d--xs:拿下,你不是贡士。
end
participant s as 贡士
participant d as 殿试
s->> d:参加殿试
alt 一甲
d->>s:进士及第
else 二甲
d->>s:进士出身
else 三甲
d->>s:同进士出身
end
opt 不在其中
d--xs:拿下,你不是贡士。
end
并行
可以显示并行发生的动作。语法如下:
par [Action 1]
... statements ...
and [Action 2]
... statements ...
and [Action N]
... statements ...
end
并行也可以嵌套。语法如下:
par [Action 1]
... statements ...
and [Action 2]
... statements ...
and [Action N]
... statements ...
par [actionNn]
... statements ...
end
end
eg
sequenceDiagram
participant t as Tom
participant k as Kite
participant b as Black
par 通知
t->>k:一块出去玩了?
and
t->> b:一块出去玩?
end
k->>t:好哦
b->>t:ok
participant t as Tom
participant k as Kite
participant b as Black
par 通知
t->>k:出去玩
and
t->> b:出去玩
end
k->>t:好哦
b->>t:ok
背景色
可以通过提供彩色背景来突出显示。 语法
rect rgb(0, 255, 0)
... content ...
end
和可以增加透明色
rect rgba(0, 255, 0,.1)
... content ...
end
0.1可以用.1表示。
eg
participant s as 贡士
participant d as 殿试
rect rgb(1,150,200)
s->> d:参加殿试
alt 一甲
d->>s:进士及第
else 二甲
d->>s:进士出身
else 三甲
d->>s:同进士出身
end
end
rect rgba(200,100,50,.2)
opt 不在其中
d--xs:拿下,你不是贡士。
end
end
代码注解
可以在序列图中输入注释,解析器将忽略这些注释。 注释需要单独一行,并且必须以 %%(双百分号)开头。 注释开始后到下一个换行符的任何文本都将被视为注释,包括任何图表语法。
sequenceDiagram
Alice->>John: 吃饭了没?
%% this is a comment
John-->>Alice: 吃了肉夹馍!
%%autonumber
participant k as 老孔
participant m as 老孟
k->>m: 吃饭了没?
%% this is a comment
m-->>k: 吃了肉夹馍!
自动编号
可以在序列图中的每个连线上加上一个序列号。 通过代码(autonumber)开启自动编号:
sequenceDiagram
autonumber
participant k as 老孔
participant m as 老孟
k->>m: 吃饭了没?
m-->>k: 吃了肉夹馍!
autonumber
participant k as 老孔
participant m as 老孟
k->>m: 吃饭了没?
m-->>k: 吃了肉夹馍!
autonumber会导致后面的序列图也会自动编号。比如综合举例中,没有显示声明autonumber连线也自动编号了。
综合举例
以第一次中东战争为例:
participant a as 阿拉伯联军
participant y as 以色列
participant m as 美国
participant l as 联合国
%% 第一阶段
rect rgb(200,250,150)
a->>+y:滚,离开阿拉伯人的地盘.<br>直接开干.
par
loop
y-->>-a:搞偷袭啊.我顶.
end
and
y--x m:大哥,拉兄弟一把.需要立即停火.
end
m-->l:建议双方停火
l-->>l:听美老大的。
par 停火三天
l ->>a:stop
and
l->>y:stop
end
par
loop
y->>y:扩充兵员,军事改组
end
and
y->>m:购买武器
m->>y:飞机、大炮要啥给啥
and
loop 阿拉伯
a-->>a:做些调整就行了。小小以色列不堪一击。
end
end
end
%% 第二阶段
rect rgb(90,200,255)
loop 10天进攻
y->>+a:万事俱备。开干!
a->>-y:我顶。
end
par 停火
l ->>a:stop
a-->>l:ok
and
l->>y:stop
y->>l:ok
end
end
%% 第三阶段
rect rgb(100,100,200)
loop
y->>+a:有美老大撑腰,停火协议算个球。我打!
a->>-y:我只好顶,顶。。。
a-->>a:好惨啊。
y->>a:占了不少地盘了,收兵。丫的,以后老实点。
end
end
markdown mermaid序列图的更多相关文章
- 在博客文章中使用mermaid 定义流程图,序列图,甘特图
概述 Mermaid(美人鱼)是一套markdown语法规范,用来在markdown文档中定义图形,包括流程图.序列图.甘特图等等. 它的官方网站是 https://mermaid-js.github ...
- Markdown Mermaid
Mermaid 是一个用于画流程图.状态图.时序图.甘特图的库,使用 JS 进行本地渲染,广泛集成于许多 Markdown 编辑器中. 之前用过 PlantUML,但是发现这个东西的实现原理是生成 U ...
- 【夯实PHP基础】UML序列图总结
原文地址 序列图主要用于展示对象之间交互的顺序. 序列图将交互关系表示为一个二维图.纵向是时间轴,时间沿竖线向下延伸.横向轴代表了在协作中各独立对象的类元角色.类元角色用生命线表示.当对象存在时,角色 ...
- 软件工程里的UML序列图的概念和总结
俗话说,自己写的代码,6个月后也是别人的代码……复习!复习!复习! 软件工程的一般开发过程:愿景分析.业务建模,需求分析,健壮性设计,关键设计,最终设计,实现…… 时序图也叫序列图(交互图),属于软件 ...
- StartUML的基础的使用,用例图,序列图
转载地址 http://blog.csdn.NET/tianhai110 (下面参考了原博主的内容,也加入自己的内容,为了自己脑补,也方便其他看到的人脑补) 使用StartUML绘制用例图: ...
- UML学习(三)-----序列图
UML的模型中可分为两种,动态模型和静态模型.用例图.类图和对象图都是UML中的静态结构模型.而在UML系统动态模型的其中一种就是交互视图,它描述了执行系统功能的各个角色之间相互传递消息的顺序关系.序 ...
- UML序列图总结(Loop、Opt、Par和Alt)
序列图主要用于展示对象之间交互的顺序. 序列图将交互关系表示为一个二维图.纵向是时间轴,时间沿竖线向下延伸.横向轴代表了在协作中各独立对象的类元角色.类元角色用生命线表示.当对象存在时,角色用一条虚线 ...
- Android -- FragmentActivity添加Fragment的序列图
FragmentActivity添加Fragment的序列图
- Android -- Looper、Handler、MessageQueue等类之间关系的序列图
原文:Android源码解析之(二)-->异步消息机制 通过阅读文章及其中提到的一些参考文章,模模糊糊的理解了Android的异步消息机制.为了能够进行消化吸收,决定把各类之间的交互通过图的形式 ...
随机推荐
- CF135A Replacement 题解
Content 有 \(n\) 个数 \(a_1,a_2,a_3,...,a_n\),试用 \(1\) ~ \(10^9\) 之间的数(除了本身)代替其中的一个数,使得这 \(n\) 个数的总和最小, ...
- CF1506A Strange Table 题解
Content 给定一个 \(n\times m\) 的矩阵.一开始,\((1,1)\) 所在位置上面的数是 \(1\),随后先由上往下将这一列中的所有位置上面填上 \(2,3,\dots,n\),再 ...
- java 输入输出IO流 IO异常处理try(IO流定义){IO流使用}catch(异常){处理异常}finally{死了都要干}
IO异常处理 之前我们写代码的时候都是直接抛出异常,但是我们试想一下,如果我们打开了一个流,在关闭之前程序抛出了异常,那我们还怎么关闭呢?这个时候我们就要用到异常处理了. try-with-resou ...
- 10-2 bonding
创建bonding设备的配置文件 centos8 /etc/sysconfig/network-scripts/ifcfg-bond0 NAME=bond0 TYPE=bond DEVICE=bond ...
- JAVA中json对象转JAVA对象,JSON数组(JSONArray)转集合(List)
json格式 {userId:'1',message:'2',create_time:'2020-03-28 20:58:11',create_date:'2020-03-28'}JAVA对象 Cha ...
- NDK编译可执行文件在Android 中运行显示error: only position independent executables (PIE) are supported.失败问题解决办法。
由于使用了NDK编译的可执行文件在应用中调用,在Android 7.0上的运行情况发现,当运行该可执行文件时,报如下错误: error: only position independent execu ...
- 【九度OJ】题目1183:守形数 解题报告
[九度OJ]题目1183:守形数 解题报告 标签(空格分隔): 九度OJ 原题地址:http://ac.jobdu.com/problem.php?pid=1183 题目描述: 守形数是这样一种整数, ...
- 【LeetCode】697. Degree of an Array 解题报告(Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 求出最短相同子数组度的长度 使用堆求最大次数和最小长 ...
- 1306 - Solutions to an Equation
1306 - Solutions to an Equation PDF (English) Statistics Forum Time Limit: 2 second(s) Memory Lim ...
- Android 常见对话框的简单使用(提示信息对话框、单选多选对话框、自定义对话框)
目录 一.提示信息对话框: 二.单选对话框: 三.多选对话框: 四.自定义对话框: 演示项目完整代码: 一.提示信息对话框: //显示提示消息对话框 private void showMsgDialo ...