前言
状态图是一个有限状态的表达,基本用于我们编程语言的逻辑运行。
mermaid 的状态图,官方说尽可能保持和 plantuml 一致,也就说写法上都差不多。
基础语法
# 这里拿官方的例子来说明
# * 和 单词都是代表一个节点
# * 是特殊节点,必须存在的!
stateDiagram
[*] --> Still
Still --> [*]
Still --> Moving
Moving --> Still
Moving --> Crash
Crash --> [*]
添加描述信息节点
# 姿势1
stateDiagram
state "This is a state description" as s2
[*] --> s2
s1 --> s2
s2 --> [*]
# 姿势2
stateDiagram
s2:"This is a state description"
[*] --> s2
s1 --> s2
state --> [*]
节点之间的过渡描述
stateDiagram
[*]--> 西游记四师徒
西游记四师徒 --> 大雷音寺: 经过九九八十一难
大雷音寺 -->[*]: 功德圆满
节点传递状态
stateDiagram
[*] --> 不知名的家庭
不知名的家庭 --> 儿子
不知名的家庭 --> 女儿
state 儿子 {
[*] --> 努力学习
努力学习 --> 打工赚钱
打工赚钱 --> 娶妻养娃
娶妻养娃 --> [*]
}
state 女儿 {
[*] --> 努力学习
努力学习 --> 打工赚钱
打工赚钱 --> 嫁人生娃
嫁人生娃 --> [*]
}
儿子 --> 孤独终老
女儿 --> 孤独终老
孤独终老 --> 化作春泥更护花
化作春泥更护花 --> [*]
状态 fork 和 join
状态分叉主要使用修饰符<<fork>>
状态汇合主要使用修饰符<<join>>
stateDiagram
state 人类 <<fork>>
[*] --> 人类
人类 --> 亚洲人
人类 --> 美洲人
人类 --> 印第安人
state 都离不开 <<join>>
亚洲人 --> 都离不开
美洲人 --> 都离不开
印第安人 --> 都离不开
都离不开 --> 生命之泉
生命之泉 --> [*]
备注
支持的方向有:right of,left of
接着上面的例子说
stateDiagram
state 人类 <<fork>>
[*] --> 人类
note left of 人类: 人类也是哺乳动物的一种,哪来那么高贵,无非适者生存,不适者淘汰
人类 --> 亚洲人
人类 --> 美洲人
人类 --> 印第安人
state 水 <<join>>
亚洲人 --> 水
美洲人 --> 水
印第安人 --> 水
水 --> 生命之泉
note right of 生命之泉
又名 water
end note
生命之泉 --> [*]
并发状态
并发状态主要用到修饰符—
stateDiagram
[*] --> 开炮
开炮--> 胜利:大吉大利,今晚吃鸡
胜利 --> [*]
state 开炮 {
[*] --> 激光炮
激光炮 --> 发射 : 充能
发射 --> 熄火 : 能量消耗完毕
--
[*] --> 东风41
东风41 --> 定点打击 : 定位->蓄能
定点打击 --> 熄火 : 确认目标击中
}