我想模擬一種有限狀態機(有限狀態機)。我有一系列狀態(比如,從StateA到StateZ)。這個序列被稱爲一個鏈,並在內部實現爲一個List。我將按照我希望它們運行的順序添加狀態。設計狀態鏈
我的目的是能夠在我的電腦中製作一系列動作(例如,鼠標點擊)。 (我知道這已經完成了數十億次)。
所以的狀態定義爲:
boolean Precondition()
< - 檢查是否爲這種情況下,有些情況是真實的。例如,如果我想單擊程序的「記錄」按鈕,在此方法中,我將檢查程序的進程是否正在運行。如果是,則轉到鏈表中的下一個狀態,否則,轉到定義爲失敗狀態的內容(通常是它們的第一個狀態)。IState GetNextState()
< - 返回下一個要評估的狀態。如果Precondition()成功,它應該產生鏈中的下一個狀態,否則它應該產生失敗狀態。Run()
只需檢查Precondition()
並設置內部數據,以使GetNextState()
按預期工作。
於是,一個很自然的做法,這將是這樣的:
Chain chain = new Chain();
//chain.AddState(new State(Precondition, FailState, NextState) <- Method structure
chain.AddState(new State(new WinampIsOpenCondition(), null, new <problem here, I want to referr to a state that still wasn't defined!>);
最大的問題是,我想打,在這一點仍然沒有被定義爲一個國家的參考。我可以通過使用字符串來回避狀態並使用內部散列表來避開這個問題,但是沒有更清晰的選擇嗎?
我只能在構造函數中傳遞前提條件和失敗狀態,讓執行前的鏈條在每個狀態下將正確的下一個狀態放在公共屬性中,但這看起來有些尷尬。