狀態圖
狀態圖是一種用於計算機科學和相關領域描述系統行為的圖。狀態圖要求描述的系統由有限數量的狀態組成。
語法:
stateDiagram-v2
[*] --> Still
Still --> [*]
Still --> Moving:push
Moving --> Still:摩擦
Moving --> Crash:速度過快
Crash --> [*]
stateDiagram-v2 [*] --> Still Still --> [*] Still --> Moving:push Moving --> Still:摩擦 Moving --> Crash:速度過快 Crash --> [*]
在狀態圖中,展示了系統有那些狀態,以及狀態之間相互轉換的。 上面的示例圖顯示了 Still、Moving
和 Crash
三種狀態。 可以將Still
狀態 更改為 Moving
。 也可以將Moving
狀態更改回Still
或Crash
。 但無法從Still
過度到Crash
狀態。
- 狀態
可以通過多種方式聲明一個狀態。 最簡單的方法是狀態定義是通過 id 。
stateDiagram-v2
id
stateDiagram-v2 id
定義狀態的另一種方法是,狀態id后接冒號和描述。
stateDiagram-v2
S:開始
R:運行
W:等待
S-->R:start()
R-->W:wait()
W-->R:notify(),nofityAll()
stateDiagram-v2 S:開始 R:運行 W:等待 S-->R:start() R-->W:wait() W-->R:notify(),nofityAll()
id:des :狀態id:狀態詳細
如果狀態比較長,並且要多次引用,可以用此種方式,可以減少敲打鍵盤的的次數。
- 過渡:狀態轉換
當一種狀態進入另一種狀態時,通過過渡轉換。 這使用文本箭頭-->
表示。
stateDiagram-v2
狀態1 --> 狀態2
stateDiagram-v2 狀態1 --> 狀態2
可以向過渡中添加文本。描述它代表什么。
stateDiagram-v2
new-->Runable:start()
stateDiagram-v2 new-->Runable:start()
- 開始和結束
有兩種特殊狀態指示圖,開始和停止。 可以用 [*]
語法表示開始或停止狀態。
stateDiagram-v2
[*] --> 運行
s1 --> [*]
stateDiagram-v2 s1:運行 [*] --> s1 s1 --> [*]
例子:
Java線程狀態圖:
stateDiagram-v2
New-->Runnable:start()
Runnable-->Waiting:wait()
Waiting-->Runnable:notify(),notifyAll()
TimedWaiting-->Runnable:sleep()結束
Runnable-->TimedWaiting:sleep()開始
Blocked-->Runnable:synchronized
Runnable-->Blocked:synchronized
Runnable-->Terminated:run()結束
stateDiagram-v2 New-->Runnable:start() Runnable-->Waiting:wait() Waiting-->Runnable:notify(),notifyAll() TimedWaiting-->Runnable:sleep()結束 Runnable-->TimedWaiting:sleep()開始 Blocked-->Runnable:synchronized Runnable-->Blocked:synchronized Runnable-->Terminated:run()結束