有限狀態機實現-簡單有限狀態機實現(一)

欠下的債總是要還的,狀態機系列已經欠下了近十個月的債了,現在終于有時間來還債了。
上篇有限狀態機實現-狀態機介紹介紹了狀態機的基本概念,不清楚的兄弟姐妹可以先回頭看看。
按照之前的計劃,整個狀態機的實現將分為下面幾個章節介紹

  • 狀態機介紹
  • 簡單有限狀態機的實現
    • 簡單有限狀態機實現(一)
  • 簡單有限狀態機的應用實例
  • 簡單狀態機功能增強
  • 有限狀態機狀態持久化設計
  • 有限狀態機持久化實現

再述概念

下圖為一個簡單的狀態機流轉圖,語言描述就是原始狀態接收一個指定的時間,執行對應的行為,流轉到下一個狀態,所謂的State,Trigger(Event),Action 在上一篇文件里已經有過詳細的介紹,此文不在累述。


示例

基于上面的描述,我們要實現一個簡單的狀態機,所要干的幾件事:

  • 定義State
  • 定義Event
  • 定義Action
  • 定義流轉(Transition)
  • 上下文的傳遞 (上下文的傳遞在任何框架中都是繞不開的問題,所以此處也單獨給出)
  • 流轉控制
    本章圍繞State,Event的定義展開,會盡量涵蓋功能,但給出的定義并不代表最終版,因為有些概念是要和后面的內容串起來講的。

State要干的那些事

State(狀態)算是狀態機中最簡單的一個概念,實現起來也是最簡的,因為狀態本身不干什么事,State可以就簡單的理解為一個標識,標識給一個Code或者ID就夠了,不過如果想擴展是就是用戶自己的行為,所以我們State是以接口形式提供的。

State實現代碼

public interface State {
    /**
     * 狀態碼
     * @return
     */
    String getCode();
}

就是這么簡單

Event干的那些事

狀態機中的Event很多版本的狀態機是叫做Trigger的,意為觸發器,其實很形象,但是個人還是喜歡用Event,用意為事件驅動,Event是一個可以拓展的地方,自動觸發,定時觸發,延時觸發,是否允許重試等,都可以在Event這個地方做拓展,不過我們第一步是定義一個簡單版本的狀態機,目前是先讓一個狀態機可以跑起來,拓展的內容我們放在增強版的。
事件也是需要有標識的,所以同樣提供getCode的方法,另外我們在此先拓展一個自動觸發的基礎功能。

Event實現代碼

public interface Event {
    /**
     * 事件碼
     * @return
     */
    String getCode();

    /**
     * 是否自動觸發
     * @return
     */
    boolean isAutoTrigger();
}

本節內容先寫到這里,內容不多,也很基礎,后面持續更新。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 『代碼github地址』 標簽: 有限狀態機,Akka fsm,squirrel-foundation,java狀...
    醉叁重閱讀 30,159評論 3 24
  • 這個系列最終實現的狀態機并不是一個標準的狀態機,把狀態機的很多標準的概念進行了簡化,對概念的東西做了減法,實現了具...
    iPolaris閱讀 34,903評論 2 40
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 173,349評論 25 708
  • 狀態機是無論科研探索還是科技應用方面都非常重要的一種分析工具。幾乎在所有涉及到隨時間演化的問題中,都可以找到狀態機...
    Esmool閱讀 4,506評論 0 26
  • 我在三天之內,閱讀了十幾萬字。 這是截止凌晨2:30的瀏覽的記錄。簡書沒有累計記載的,是當天記錄的。我閱讀的字數之...
    aabebw閱讀 151評論 0 0