狀態(tài)機的實現(xiàn)方法和裝置的制造方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及狀態(tài)機,尤其是涉及一種狀態(tài)機的實現(xiàn)方法和裝置。
【背景技術(shù)】
[0002] 現(xiàn)有的狀態(tài)機實現(xiàn)一般有過程模式和狀態(tài)對象模式兩種。
[0003] 過程模式一般通過條件判斷的方式對狀態(tài)進行劃分,判斷得到具體狀態(tài)后,再在 該判斷分支內(nèi)對事件進行判斷,確定響應(yīng)的轉(zhuǎn)換動作。這種模式的缺點包括:代碼復(fù)用性 差;狀態(tài)的退出和進入在多個轉(zhuǎn)換動作中都必須重寫;增加或修改一個狀態(tài)時需要修改多 個判斷分支,可維護性差;對于復(fù)雜的系統(tǒng),存在大量的狀態(tài)和時間,代碼量龐大,維護困難 等。
[0004] 狀態(tài)對象模式則是將一個特定的狀態(tài)用一個狀態(tài)對象封裝起來,并將事件和轉(zhuǎn)換 等作為對象的方面來描述,解決了過程模式需要大量判斷分支的情況。通過對象封裝可以 很容易增加一個狀態(tài)。這種方法的缺陷在于:每增加一個事件或改變一個轉(zhuǎn)換,都可能影響 多個類;對于復(fù)雜的系統(tǒng),狀態(tài)對象的數(shù)量也很龐大,可維護性仍不高;對象中的轉(zhuǎn)換方法 也很難在其他狀態(tài)對象中復(fù)用。
【發(fā)明內(nèi)容】
[0005] 本發(fā)明所要解決的技術(shù)問題是提供一種可動態(tài)配置的狀態(tài)機的實現(xiàn)方法和裝置,
[0006] 本發(fā)明為解決上述技術(shù)問題而采用的技術(shù)方案是提供一種狀態(tài)機的實現(xiàn)方法,包 括狀態(tài)機生成流程,其包括以下步驟:獲取用于生成狀態(tài)機的配置文件,該配置文件描述 每個狀態(tài)的標(biāo)識以及對各個事件的響應(yīng)信息和狀態(tài)轉(zhuǎn)換信息,且描述多個狀態(tài)間的層級關(guān) 系;根據(jù)該配置文件生成狀態(tài)機;以及提供一響應(yīng)功能集模塊,該響應(yīng)功能集模塊包含該 狀態(tài)機中的響應(yīng)信息所對應(yīng)的響應(yīng)功能。
[0007] 可選地,獲取用于生成狀態(tài)機的配置文件和根據(jù)該配置文件生成狀態(tài)機的步驟是 在一狀態(tài)機引擎中執(zhí)行,該狀態(tài)機引擎與該響應(yīng)功能集模塊相互獨立。
[0008] 可選地,該狀態(tài)機生成流程還包括:提供一數(shù)據(jù)池,該數(shù)據(jù)池包含該響應(yīng)功能集模 塊的各響應(yīng)功能需要共享的數(shù)據(jù)。
[0009] 可選地,該數(shù)據(jù)池具有統(tǒng)一的數(shù)據(jù)訪問接口。
[0010] 可選地,該數(shù)據(jù)池具有實時訪問的加密接口。
[0011] 可選地,上述方法還包括離線調(diào)試流程,其包括以下步驟:打開指定的配置文件; 生成需要調(diào)試的狀態(tài)機;呈現(xiàn)該配置文件中所記錄的事件;將調(diào)試者選擇的事件傳入該狀 態(tài)機,驅(qū)動該狀態(tài)機運行;以及獲得及呈現(xiàn)當(dāng)前狀態(tài)的列表。
[0012] 可選地,上述方法還包括實時調(diào)試流程,其包括以下步驟:從運行的狀態(tài)機中實時 讀取數(shù)據(jù);以及呈現(xiàn)所讀取的數(shù)據(jù)。
[0013] 本發(fā)明還提出一種狀態(tài)機的實現(xiàn)裝置,包括狀態(tài)機引擎和響應(yīng)功能集模塊。狀態(tài) 機引擎配置為獲取用于生成狀態(tài)機的配置文件,及根據(jù)該配置文件生成狀態(tài)機,該配置文 件描述每個狀態(tài)的標(biāo)識以及對各個事件的響應(yīng)信息和狀態(tài)轉(zhuǎn)換信息,且描述多個狀態(tài)間的 層級關(guān)系。響應(yīng)功能集模塊包含該狀態(tài)機中的響應(yīng)信息所對應(yīng)的響應(yīng)功能。
[0014] 可選地,該狀態(tài)機引擎與該響應(yīng)功能集模塊相互獨立。
[0015] 可選地,上述裝置還包括一數(shù)據(jù)池,該數(shù)據(jù)池包含該響應(yīng)功能集模塊的各響應(yīng)功 能需要共享的數(shù)據(jù)。
[0016] 可選地,該數(shù)據(jù)池具有統(tǒng)一的數(shù)據(jù)訪問接口。
[0017] 可選地,該數(shù)據(jù)池具有實時訪問的加密接口。
[0018] 可選地,上述裝置還包括離線調(diào)試工具,其配置為執(zhí)行以下步驟:打開指定的配置 文件;生成需要調(diào)試的狀態(tài)機;呈現(xiàn)該配置文件中所記錄的事件;將調(diào)試者選擇的事件傳 入該狀態(tài)機,驅(qū)動該狀態(tài)機運行;以及獲得及呈現(xiàn)當(dāng)前狀態(tài)的列表。
[0019] 可選地,上述裝置還包括實時調(diào)試工具,其配置為執(zhí)行以下步驟:從運行的狀態(tài)機 中實時讀取數(shù)據(jù);以及呈現(xiàn)所讀取的數(shù)據(jù)。
[0020] 與現(xiàn)有技術(shù)相比,本發(fā)明可提供可動態(tài)配置的狀態(tài)機架構(gòu),開發(fā)人員不需要通過 使用對象來封裝狀態(tài)、事件和轉(zhuǎn)換動作,只需通過配置文件描述狀態(tài)機中的狀態(tài)結(jié)構(gòu),定義 每個狀態(tài)的信息和轉(zhuǎn)換動作。根據(jù)配置文件能夠生成產(chǎn)生開發(fā)人員定義的狀態(tài)機。本發(fā)明 解決了現(xiàn)有狀態(tài)機實現(xiàn)模式的復(fù)雜度,提高了狀態(tài)機架構(gòu)的復(fù)用性和可維護性。
【附圖說明】
[0021] 圖1是根據(jù)本發(fā)明一實施例的狀態(tài)機實現(xiàn)裝置的結(jié)構(gòu)框圖;
[0022] 圖2是根據(jù)本發(fā)明一實施例的配置文件架構(gòu)實例;
[0023] 圖3是根據(jù)本發(fā)明一實施例的響應(yīng)功能集模塊實例;
[0024] 圖4是根據(jù)本發(fā)明一實施例的狀態(tài)機實例;
[0025] 圖5是根據(jù)本發(fā)明另一實施例的狀態(tài)機實現(xiàn)裝置的結(jié)構(gòu)框圖;
[0026] 圖6是根據(jù)本發(fā)明一實施例的離線調(diào)試工具示意圖;
[0027] 圖7是根據(jù)本發(fā)明一實施例的實時調(diào)試工具示意圖;
[0028] 圖8是根據(jù)本發(fā)明一實施例的狀態(tài)機實現(xiàn)方法流程圖;
[0029] 圖9是根據(jù)本發(fā)明另一實施例的狀態(tài)機實現(xiàn)方法流程圖;
[0030] 圖10是根據(jù)本發(fā)明又一實施例的狀態(tài)機實現(xiàn)方法流程圖。
【具體實施方式】
[0031] 為讓本發(fā)明的上述目的、特征和優(yōu)點能更明顯易懂,以下結(jié)合附圖對本發(fā)明的具 體實施方式作詳細說明。
[0032] 在下面的描述中闡述了很多具體細節(jié)以便于充分理解本發(fā)明,但是本發(fā)明還可以 采用其它不同于在此描述的其它方式來實施,因此本發(fā)明不受下面公開的具體實施例的限 制。
[0033] 圖1是根據(jù)本發(fā)明一實施例的狀態(tài)機實現(xiàn)裝置的結(jié)構(gòu)框圖。參考圖1所示,狀態(tài)機 實現(xiàn)裝置100可包括狀態(tài)機引擎110、響應(yīng)功能集模塊120和數(shù)據(jù)池130。狀態(tài)機引擎110 連接響應(yīng)功能集模塊120。響應(yīng)功能集模塊120連接數(shù)據(jù)池130。狀態(tài)機引擎110用于生成 狀態(tài)機。響應(yīng)功能集模塊120用于提供狀態(tài)機中針對事件的響應(yīng)信息所對應(yīng)的響應(yīng)功能。
[0034] 響應(yīng)功能集模塊120可包含許多響應(yīng)功能的集合,該集合中的部分或全部功能可 被一個或多個狀態(tài)機調(diào)用。響應(yīng)功能集模塊120的各個功能最好是相互獨立的功能,每個 功能只負(fù)責(zé)特定的任務(wù)。在狀態(tài)機中,一個狀態(tài)對于一個事件的響應(yīng)動作中可以調(diào)用一個 或者多個功能。圖3是根據(jù)本發(fā)明一實施例的響應(yīng)功能集模塊實例。參考圖3所示,響應(yīng) 功能集模塊1中可包括響應(yīng)功能1-1和1-2,響應(yīng)功能集模塊2中可包括響應(yīng)功能2-1、2-2 和 2_3〇
[0035] 響應(yīng)功能集模塊120可以由多個分散的模塊自由組合而成,每個模塊可以實現(xiàn)響 應(yīng)功能集模塊120的一部分功能。與單個模塊實現(xiàn)所有功能相比,分散的模塊便于模塊在 不同產(chǎn)品中的復(fù)用。
[0036] 在較佳實施例中,狀態(tài)機引擎110和響應(yīng)功能集模塊120是相互獨立的。相應(yīng)地, 狀態(tài)機引擎110所生成的狀態(tài)機相應(yīng)于響應(yīng)功能集模塊120也是獨立的。狀態(tài)機可以通過 委托的方式調(diào)用響應(yīng)功能集模塊120中的功能,減少兩者間耦合。
[0037] 數(shù)據(jù)池130包含響應(yīng)功能集模塊120中各個響應(yīng)功能需要共享的數(shù)據(jù)。在一個實 施例中,數(shù)據(jù)池130提供了統(tǒng)一的數(shù)據(jù)訪問接口。在較佳實施例中,數(shù)據(jù)池130可以提供實 時訪問其內(nèi)部所有數(shù)據(jù)的加密接口,這樣,允許通過特定工具在狀態(tài)機運行時實時查看數(shù) 據(jù)池130中的數(shù)據(jù)。通過后文的描述可知,這一特性對于實時調(diào)試狀態(tài)機是非常有益的。
[0038] 在一實施例,狀態(tài)機引擎110是根據(jù)配置文件來生成狀態(tài)機。配置文件是用于生 成狀態(tài)機的文件。配置文件中描述每個狀態(tài)的標(biāo)識以及對各個事件的響應(yīng)信息和狀態(tài)轉(zhuǎn)換 信息,且描述多個狀態(tài)間的層級關(guān)系。根據(jù)這些信息,狀態(tài)機引擎110可以生成與配置文件 對應(yīng)的狀態(tài)機。此狀態(tài)機將按照配置文件中的結(jié)構(gòu)進行部署。在一實施例中,一個配置文 件可對應(yīng)一個狀態(tài)機。然而可以理解,配置文件與狀態(tài)機的對應(yīng)關(guān)系并不需要如此嚴(yán)格,例 如多個配置文件可以對應(yīng)同一個狀態(tài)機。
[0039] 圖2是根據(jù)本發(fā)明一實施例的配置文件架構(gòu)實例。參考圖2所示,配置文件200可 描述多個狀態(tài),例如父狀態(tài)1和父狀態(tài)2。每一父狀態(tài)下還可包含一個或多個子狀態(tài),例如 父狀態(tài)2下的子狀態(tài)2-1和子狀態(tài)2-2。每個狀態(tài)的配置可包含狀態(tài)名稱或標(biāo)識(ID)。例如 父狀態(tài)1中描述了名稱"狀態(tài)1"和ID "001",父狀態(tài)2中描述了名稱"狀態(tài)2"和ID "002"。 配置文件200還描述對各個事件的響應(yīng)和狀態(tài)轉(zhuǎn)換信息。例如在父狀態(tài)1下,事件1可觸 發(fā)父狀態(tài)1到父狀態(tài)2的轉(zhuǎn)換,且執(zhí)行響應(yīng)功能1-1。在父狀態(tài)2下,事件2可觸發(fā)父狀態(tài) 2到父狀態(tài)1的轉(zhuǎn)換,且執(zhí)行響應(yīng)功能1-2。在子狀態(tài)2-1下,事件3可觸發(fā)子狀態(tài)2-1到 子狀態(tài)2-2的轉(zhuǎn)換,且執(zhí)行響應(yīng)功能2-1。
[0040] 配置文件中每一個狀態(tài)的偽格式如下:
[0041] 每個狀態(tài)以State:開頭,后續(xù)縮進的內(nèi)容為該狀態(tài)下的配置:ID為狀態(tài)ID ;Name 為狀態(tài)名;SubStates下縮進的內(nèi)容為子狀態(tài)的ID列表,該列表可為空;Events下縮進的 內(nèi)容為事件列表,該列表可為空。
[0042] 每個事件以Event:開頭,后續(xù)縮進內(nèi)容為此事件的配置:ID為事件ID ;Name 為事件名;Trainsit為響應(yīng)該事件后迀移至的狀態(tài)ID,該配置可以為空,表示不迀移; Reactions下縮進的內(nèi)容為響應(yīng)動作列表,該列表可為空。
[0043] 每個響應(yīng)動作以Reaction:開頭,后續(xù)縮進內(nèi)容為此響應(yīng)動作的配置:ID為響應(yīng) 動作ID ;Name為響應(yīng)動作名。
[0044]
[0045] 上述配置文件200的文本表示如下:
[0046] LlN 丄A yJ^ rVJ 0/3 JM
[0047] CN 105138332 A ~P 6/8 頁
[0048] 狀態(tài)機引擎可以對配置文件采用統(tǒng)一的事件結(jié)構(gòu),包含事件的名稱、ID和攜帶的 參數(shù)等。狀態(tài)機可根據(jù)配置文件中的信息對每個傳入的事件進行處理,觸發(fā)狀態(tài)響應(yīng),并控 制狀態(tài)的轉(zhuǎn)換。
[0049] 狀態(tài)機引擎110通過配置文件自動生成狀態(tài)機后,即可按照配置文件中定義的事 件來驅(qū)動狀態(tài)做出響應(yīng),并轉(zhuǎn)換狀態(tài)。狀態(tài)對事件進行響應(yīng)時則根