2012-12-08 55 views
7

在網絡編程中有一些情況需要具有多級和分級深度的狀態機。多級和分級狀態機的設計

State Machine 1 
    State Machine 2 

    State Machine 3 
      State Machine 4 

這裏狀態機1包含兩個狀態機233也包含一臺機器4

根據外機的狀態,消息應該通過內部狀態機。同樣,如果內部狀態機中存在一些錯誤,則應將反饋提供給上位機。

有沒有一個很好的方法來做到這一點?

現在我有一個if語句和標誌爲我做這個的叢林。由於狀態機的整個狀態都處於不可恢復的狀態,因此我仍然面臨一些標誌未設置的問題。

更新: 我試圖保持狀態和機器靜態。由於請求會通過機器和狀態,請求本身會存儲所有需要的元數據。在這種情況下,正常的狀態機模式不起作用。

回答

0

State Pattern分開狀態和上下文上下文可以存儲狀態的層次結構,狀態子類本身不知道這個層次結構。所有if語句都消失了,因爲if中的每個節都進入了一個單獨的狀態子類。

+0

我試圖使用狀態,但似乎並沒有爲這樣的設計工作。實際上,我的程序流程也在機器之間來回切換。就像在一個事件中,我在內部機器上,但對於下一個事件,我需要在外部機器中。這就是造成重大問題的原因。 –

+0

您應該閱讀關於設計模式的GOF手冊。在實現部分中介紹了實現您所談論的狀態轉換。我會爲你總結它:狀態轉換可以完全在Context或State子類中實現。你應該選擇在哪裏實施,通過問問題如下:是固定的國家數量還是將增加更多? – user1168577

6

也許Android的源代碼可以幫助理解如何做到這一點?檢查WiFi state machine here ..

+0

感謝它幫助我澄清了一些問題。 –

+0

不客氣。最近我有同樣的問題,所以最近我正在閱讀。希望別人也會覺得它有用;) – Ewoks