狀態圖主要描述一個對象在其生命周期內的狀態變化,對象由事件驅動并滿足一定的條件從一個狀態轉換到另一個狀態。狀態圖顯示了一個狀態機。
下面是一個表示借書的狀態圖(描述書的狀態轉換)

狀態圖都由哪些元素組成呢?
一、初始狀態
初始狀態是狀態機的起始位置,它不需要事件的觸發。一個狀態圖只能有一個初始狀態。狀態圖總是以初始狀態開始,以終止狀態結束
二、狀態
狀態是對象執行某項活動或等待某個事件時的條件。狀態可以由以下幾部分組成:
1、Name:狀態名稱
2、Entry/Exit Action:進入和退出動作
3、Internal Transition:內部轉移(對事件作出響應,執行一定的動作,但不會發生狀態的轉換)
4、Do:狀態保持不變時執行的動作
5、SubStage:子狀態(當狀態是復合狀態時)
6、Deferred Event:延遲事件(未在本狀態中處理,但不被丟棄,而是延遲到其它狀態中處理的事件)
下面是一個燈的點燃狀態的例子
如果一個狀態比較復雜,那么它還可以擁有子狀態,拿上面借書的例子,書的被借狀態又可包含兩個子狀態:被正常借、被續借
三、轉移
上面已經講過了一種特殊的轉移:內部轉移,但是這種轉移只是響應一定的事件,執行一定的動作,并不會放生狀態的轉移
下面介紹一下一般轉移的格式:
狀態的轉移一般由三部分組成
1、event(事件):觸發狀態轉移的原因
2、Guard Condition(保衛條件):是一個布爾表達式,當事件被觸發時要判斷保衛條件的值,值為True才會發生狀態的轉換
3、Action(活動):狀態轉換時執行的活動
下面是一個電水壺燒水的狀態轉換
當事件turn on放生時,只有水壺內有水(have water)才能由off狀態轉換到on狀態,并發生燒水的動作(Boiling Water)。其實動作也可以放在on狀態中。
四、結束狀態
結束狀態表示狀態機執行結束或對象生命的終結,一個狀態圖可以有多個結束狀態。
在實際的應用中,不必為每個對象都創建狀態圖,而是只為那些比較復雜的,狀態比較多的對象創建狀態圖。狀態圖是一種很有用的圖,它可以幫助我們分析復雜對象的狀態轉換和對象在什么時候執行什么樣的動作。網上購物過程中,我們會經常查看訂單的狀態,描述訂單的狀態機就是一個比較經典的狀態圖,網上有很多關于訂單狀態圖的例子,大家可以查一下,我在這里就不再贅述了。