有限狀態自動機的應用

有限狀態自動機

        通過“簡單、優雅的方法去揭示和定義複雜系統的行爲”,同樣”提供了一個易於理解、易於修改的有效實現策略“,廣泛適用於: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很容易上手體驗。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章