Go語言實現有限狀態機(FSM)

2020-07-16 10:05:16
有限狀態機又簡稱 FSM(Finite-State Machine 的首字母縮寫),也可以稱為有限狀態自動機。它是為研究有限記憶體的計算過程和某些語言類而抽象出的一種計算模型。有限狀態機擁有有限數量的狀態,每個狀態可以遷移到零個或多個狀態,輸入字串決定執行哪個狀態的遷移。

現實生活中,狀態是隨處可見的,並且通過不同的狀態來做不同的事。比如冷了加衣服、餓了吃飯、睏了睡覺等。這裡的冷了、餓了、睏了是三種不同的狀態,並且根據這三個狀態的轉變驅動了不同行為的產生(加衣服、吃飯和睡覺)。

有限狀態機的組成

有限狀態機有兩個必要的特點,一是離散的,二是有限的。基於這兩點,現實世界上絕大多數事物因為複雜的狀態而無法用有限狀態機表示。

而描述事物的有限狀態機模型的元素由以下組成:
  • 狀態(State):事物的狀態,包括初始狀態和所有事件觸發後的狀態。
  • 事件(Event):觸發狀態變化或者保持原狀態的事件。
  • 行為或轉換(Action/Transition):執行狀態轉換的過程。
  • 檢測器(Guard):檢測某種狀態要轉換成另一種狀態的條件是否滿足。

有限狀態機的應用領域

除了應用於數學模型外,有限狀態機在許多不同領域都有重要應用,包括電氣工程、語言學、電腦科學、哲學、生物學、數學和邏輯學。有限狀態機歸屬於自動機理論,下面的自動機理論的領域分層圖中就可以看出,越是外層的概念越複雜。


圖:自動機理論