有限狀態自動機
通過“簡單、優雅的方法去揭示和定義複雜系統的行爲”,同樣”提供了一個易於理解、易於修改的有效實現策略“,廣泛適用於:GUI(如QT的state machine framework)、通信協議解析等。
一個狀態機包含一個當前的狀態、狀態列表、狀態遷移描述;狀態遷移包含如下組成部分:起始狀態、觸發遷移的事件、終止狀態、要執行的動作。
實現方式
1. 嵌套switch/case
表現爲2層case判斷狀態、事件類型進行處理的結構,有限狀態、少量事件情況下,最爲有效的方法。
2. 解釋遷移表
根據狀態機持有的狀態遷移表,處理所有事件內容,主要接口(C)包含:
// 根據狀態遷移表創建狀態機
FSM_M* fsmCreate(FSM_TRANSITION_TABLE* pTable);
// 狀態機處理事件接口
int fsmEvtProc(FSM_M* pFsm);
相較於其他兩種方式,如果事件執行的動作,需要進行狀態遷移,並且遷出狀態有多種的情況下,會引起狀態表的膨脹。
3. STATE模式
與策略模式的差異:
STATE模式中,派生的實際狀態類型可能會需要改變上下文狀態,而策略模式中派生策略是看不到上下文類的。
關係:
“所有的STATE模式實例同樣也是STRATEGY模式實例,但是並非所有的STRATEGY模式實例都是STATE模式實例。”[3]
***QT4支持
QT4的接口已然簡潔許多,例子Two-way Button Example很容易上手體驗。