时序图是一种表现交互过程的图示,主要展示各个参与者之间是如何交互的,以及交互的顺序是怎样的。它的主要构成元素有:

参与者

传统时序图概念中参与者有角色和类对象之分,但这里我们不做此区分,用参与者表示一切参与交互的事物,可以是人、类对象、系统等形式。中间竖直的线段从上至下表示时间的流逝。
mermaid绘制时序图 - 图1
画法:

  1. sequenceDiagram
  2. participant 客户端
  3. participant 服务器

sequenceDiagram 为每幅时序图的固定开头> participant <参与者名称> 声明参与者,语句次序即为参与者横向排列次序

消息

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

  1. sequenceDiagram
  2. participant 老板A
  3. participant 员工A
  4. 老板A ->> 员工A : “在这里我们都是兄弟!”
  5. 老板A -x 员工A : 画个饼
  6. 员工A -->> 老板A : 鼓掌

消息语句格式为:> <参与者> <箭头> <参与者> : <描述文本>。其中 > <箭头>的写法有:> ->> 显示为实线箭头(主动发出消息)> -->>显示为虚线箭头(响应)> -x显示为末尾带「X」的实线箭头(异步消息)

注:> participant <参与者名称> 这句可以省略,省略后参与者横向排列的次序,由消息语句中其出现的次序决定。如后续示例所示。

激活框

从消息接收方的时间线上标记一小段时间,表示对消息进行处理的时间间隔。
mermaid绘制时序图 - 图3
画法如下,注意体会箭头符号后的 +- 的使用方法和效果,它们相当于激活框的开关:

  1. sequenceDiagram
  2. 老板B ->> + 员工B : “你们要669!”
  3. 员工B -->> - 老板B : 鼓掌
  4. 老板B ->> + 员工B : “悔创本司!”
  5. 员工B -->> - 老板B : 鼓掌

注解

mermaid绘制时序图 - 图4
画法:

  1. sequenceDiagram
  2. Note left of 老板A : 对脸不感兴趣
  3. Note right of 老板B : 对钱不感兴趣
  4. Note over 老板A,老板B : 996感兴趣

循环(loop)

在条件满足时,重复发出消息序列。相当于编程语言中的 while 语句。
mermaid绘制时序图 - 图5
画法:

  1. sequenceDiagram
  2. 网友 ->> + X : 网购钟意的商品
  3. X -->> - 网友 : 下单成功
  4. loop 一天七次
  5. 网友 ->> + X : 查看配送进度
  6. X -->> - 网友 : 配送中
  7. end

选择(alt)

在多个条件中作出判断,每个条件将对应不同的消息序列。相当于 if 及 else if 语句。
mermaid绘制时序图 - 图6
画法:

  1. sequenceDiagram
  2. 土豪 ->> 取款机 : 查询余额
  3. 取款机 -->> 土豪 : 余额
  4. alt 余额 > 5000
  5. 土豪 ->> 取款机 : 取上限值 5000
  6. else 5000 < 余额 < 100
  7. 土豪 ->> 取款机 : 有多少取多少
  8. else 余额 < 100
  9. 土豪 ->> 取款机 : 退卡
  10. end
  11. 取款机 -->> 土豪 : 退卡

可选(opt)

在某条件满足时执行消息序列,否则不执行。相当于单个分支的 if 语句。
mermaid绘制时序图 - 图7
画法:

  1. sequenceDiagram
  2. 老板C ->> 员工C : 开始实行996
  3. opt 永不可能
  4. 员工C -->> 老板C : 拒绝
  5. end

并行(Par)

将消息序列分成多个片段,这些片段并行执行。
mermaid绘制时序图 - 图8
画法:

  1. sequenceDiagram
  2. 老板C ->> 员工C : 开始实行996
  3. par 并行
  4. 员工C ->> 员工C : 刷微博
  5. and
  6. 员工C ->> 员工C : 工作
  7. and
  8. 员工C ->> 员工C : 刷朋友圈
  9. end
  10. 员工C -->> 老板C : 9点下班