markdown中流程图、时序图、状态图、类图(UML)语法教程

流程图

致谢 https://zhuanlan.zhihu.com/p/69495726

方向定义

graph 方向

TB:从上至下 BT:从下至上 LR:从左至右 RL:从右至左

节点定义

代码:

```mermaid
graph LR
A(圆角矩形)
B[矩形]
C{"判断"}
D((流程连接点))
​```

其中A B C D 这些字符代表节点名称(实际应用时应该见名知义),这些名称可以在之后反复利用(相当于定义的变量)

效果:

圆角矩形

矩形

判断

流程连接点

线段定义

代码:

```mermaid
graph TB;
A("开始") -.-> B{"判断?"}
B ---|否| C["否:执行逻辑"]
B ==>|是| D["是:执行逻辑"]
​```
  • 如果达不到预期效果,应该是包含特殊字符,对描述文本添加双引号试试
  • 除上述带箭头线段 --> 外,还有带箭头虚线线段 -.->、 带箭头加粗线段 ==>、不带箭头线段 ---

效果:

开始:虚线

判断?

否:不带箭头

是:加粗线段

时序图

示例代码:

```mermaid
sequenceDiagram
participant A as Alice
A->> John: Hello John, how are you?
John-->> A: I'm fine
​```

sequenceDiagram:为固定开头

其中可以使用:participant 别名 as 对象显示名
定义类别名

JohnAliceJohnAliceHello John, how are you?I'm fine

消息

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

代码格式:

<参与者><箭头><参与者>:<描述文本> 。 描述文本可以为空,但是: 不能省略。

箭头写法:

其中实线表示请求,虚线表示响应:

  • -> :无箭头的实线
  • -->:无箭头的虚线
  • ->> :有箭头的实线(主动发出消息)
  • -->>:有箭头的虚线(响应)
  • -x:末尾带「x」 的实线箭头
  • --x:末尾带「x」的虚线箭头

代码示例:

```mermaid
sequenceDiagram
A-> B: 实线
B--> A: 虚线
A->>B: 带箭头
A-x B: 末尾带「x」
​```

效果:

BABA实线虚线带箭头末尾带 x

最后一个带 x 的不知道为什么在博客园里没有显示箭头,但是在编辑器里是有箭头的

激活框

从消息接收方 的时间上上标记一小段时间,表示对消息进行处理的时间间隔

激活方式:

  1. 直接激活

    ​ 开始: activate <对象>
    ​ 结束: deactivate <对象>

  2. 符号激活

    ​ +<对象>
    ​ -<对象>

代码示例:

```mermaid
sequenceDiagram
		A ->> + B : 激活B接着直接激活A
		activate A
		B -->> - A : 结束B
		A ->> B : 请求B
		B -->> A : 结束A
		deactivate A
​```

效果:

BABA激活B接着直接激活A结束B请求B结束A

使用直接激活时:包裹的部分为一段激活框

使用符号激活时:开始和结束的对象要不同(例如:+B 要以 -A 结束)

注释

语法格式:

Note [位置] [对象]: <注释内容>

显示位置:

以被标记的对象中心为参考系,横跨多个时,可以用逗号分割:

  • right of
  • left of
  • over

代码示例:

```mermaid
sequenceDiagram 
note left of A : A的左边
note right of B :  B的右边
note over A,B:  A和B的中间
​```

效果:

BABAA的左边B的右边A和B的中间

循环

当条件满足时,重复发出消息序列(相当于while语句)。语法格式如下:

loop 消息说明
[消息流]
end

代码示例:

```mermaid
sequenceDiagram
A  ->> + B : 你是谁
B -->> - A : 不想说

loop  一天7次
A ->> + B: 你是谁
B -->> - A : 就不说
end
​```

效果:

BABAloop[一天7次]你是谁不想说你是谁就不说

选择

在多个条件中做出判断,每个条件对应不同的消息队列(相当于if else 语句)。语法格式如下:

alt 条件说明
  [消息流]
else
  [消息流]
else
  [消息流]
end

代码示例:

```mermaid
sequenceDiagram
		A ->> + B : 查询余额
		B -->> - A: 余额
		
		alt 余额 > 5000 
			A ->> B : 余额 > 5000 
		else 100 < 余额 < 5000
			A ->> B : 100 < 余额 < 5000
		else 余额 < 100 
			A ->> B : 余额 < 100 
		end 
		
		B -->> A : 退卡成功
​```

效果:

BABAalt[余额 > 5000][100 < 余额 < 5000][余额 < 100]查询余额余额放心了买东西了绝对不可能退卡成功

可选

在满足某条件的时候执行消息序列,否则不执行,相当于单个分支的if语句。 语法格式如下:

opt 条件说明
[消息流]
end

代码示例:

```mermaid
sequenceDiagram
A ->> +B : 休假

opt 带薪休假
B -->> -A : 不可能
end 
​```

效果:

BABAopt[带薪休假]休假不可能

并行

将消息序列分成多个片段,并行执行。语法格式如下:

par 说明
  [消息流]
and
  [消息流]
and
  ……
end

代码示例:

```mermaid
sequenceDiagram
A ->> B : 学习

par 学习时间
	B ->> B : 喝水
and 
	B ->> B : 用手机看看时间
and 
	B ->> B : 放点音乐
end

B -->> A : 明天再学
​```

效果:

BABApar[学习时间]学习喝水用手机看看时间放点音乐明天再学

背景颜色

语法格式:

rect rgb(191, 222, 233)
  [消息流]
end

代码示例:

```mermaid
sequenceDiagram
A ->> +B : 1 + 1 = ?
rect rgb(191, 223, 255)
    B ->> B : 思考一分钟
    B -->> A : 等于3
end
​```

效果:

BABA1 + 1 = ?思考一分钟等于3

状态图

语法介绍:

  • 定义状态:直接声明id、状态id后接冒号和描述

代码示例:

```mermaid
stateDiagram-v2
    stop: 停止
    move
    [*] --> stop
    stop --> [*]
    stop--> move:推动
    move--> stop:挡住
    move--> 撞击:速度过快
    撞击 --> [*]
​```

效果:

推动

挡住

速度过快

停止

move

撞击

类图

可见性:

  • + 表示 public

  • - 表示 private

  • # 表示 protected

  • ~ 表示 package/internal

  • * 表示 Abstract

  • $ 表示 Static

  • <<Interface>> 表示 接口类

  • <<Abstract>> 表示 抽象类

  • <<Service>> 表示 服务类

  • <<Enumeration>> 表示 枚举

方法返回值在括号右边添加;泛型用~号代替尖括号

定义类

```mermaid
classDiagram
class classA {
    <<Abstract>>
    +String name
    -Integer age
    +List~int~ position
    +eat(food) bool $
    +setPoints(List~int~ points)*
    +getPoints() List~int~
}

​```

«Abstract»

classA

+String name

-Integer age

+List<int> position

+eat(food) : bool

+setPoints(List<int> points)

+getPoints() : List<int>

定义关系

主要语法: [classA][Arrow][ClassB]:描述

```mermaid
classDiagram
classA <|-- classB : 继承
classC *-- classD : 组合
classE o-- classF : 聚合
classG <-- classH : 关联
classI -- classJ : 实线
classK <.. classL : 依赖
classM <|.. classN : 实现
classO .. classP : 虚线

​```

继承

组合

聚合

关联

实线

依赖

实现

虚线

classA

classB

classC

classD

classE

classF

classG

classH

classI

classJ

classK

classL

classM

classN

classO

classP

posted @   喵师傅  阅读(2945)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示