1. 程式人生 > >設計模式:一目瞭然的狀態機圖

設計模式:一目瞭然的狀態機圖

從第一次認識到狀態機這個概念,程式設計似乎就從未離開過它,通過廣大網友的技術分享,本文對狀態機再做一次總結。瞭解什麼是狀態機圖,它的使用場景是什麼?

一、什麼是狀態機?

做產品的時候,我們總能遇到一些比較複雜的邏輯問題,而普通的流程圖,或時序圖對於物件和狀態的解讀缺乏直觀的描述。

這裡我們推薦使用簡單的狀態圖來對邏輯問題進行描述:

有限狀態機,(英語:Finite-state machine, FSM),又稱有限狀態自動機,簡稱狀態機,是表示有限個狀態以及在這些狀態之間的轉移和動作等行為的數學模型

有限狀態機是一種用來進行物件行為建模的工具,其作用主要是描述物件在它的生命週期內所經歷的狀態序列,以及如何響應來自外界的各種事件。在電腦科學中,有限狀態機被廣泛用於建模應用行為、硬體電路系統設計、軟體工程,編譯器、網路協議、和計算與語言的研究。

二、狀態機圖怎麼畫?

基本元素

當你需要描述一個物件或系統的行為狀態時,相比於直接的語言描述,更推薦使用狀態機表或狀態機圖的形式。

首先我們看一下基本元素:

做需求時,需要了解以下六種元素:起始、終止、現態、次態(目標狀態)、動作、條件,我們就可以完成一個狀態機圖了:

①現態:是指當前所處的狀態。

②條件:又稱為“事件”,當一個條件被滿足,將會觸發一個動作,或者執行一次狀態的遷移。

③動作:條件滿足後執行的動作。動作執行完畢後,可以遷移到新的狀態,也可以仍舊保持原狀態。動作不是必需的,當條件滿足後,也可以不執行任何動作,直接遷移到新狀態。

④次態:條件滿足後要遷往的新狀態。“次態”是相對於“現態”而言的,“次態”一旦被啟用,就轉變成新的“現態”了。

注意事項

1、避免把某個“程式動作”當作是一種“狀態”來處理。那麼如何區分“動作”和“狀態”?“動作”是不穩定的,即使沒有條件的觸發,“動作”一旦執行完畢就結束了;而“狀態”是相對穩定的,如果沒有外部條件的觸發,一個狀態會一直持續下去。

2、狀態劃分時漏掉一些狀態,導致跳轉邏輯不完整。所以在設計狀態機時,我們需要反覆的檢視設計的狀態圖或者狀態表,最終達到一種牢不可破的設計方案。

狀態機表怎麼畫?

首先我們看下下面這張狀態機圖,展示了一張簡單的單審批人檔案的狀態流轉情況。

那麼如何把他寫成表呢?這裡有多種寫法,區別於縱座標的不同,我們舉兩種:

左側的縱座標為初始狀態,橫座標為終止狀態。

右側的縱座標為動作條件,橫座標為終止狀態。

那麼對於動作比較多且複雜的情況下,可以考慮採用右側的表格,這樣會比較一目瞭然。

三、使用場景

狀態機圖經常應用在程式的設計過程中,使用清晰明瞭的狀態機圖設計程式碼邏輯架構,再使用程式語言去實現。當然也可以畫一個狀態機圖來展示某崗位的工作:

在另一篇博文中,將介紹使用C語言來實現狀態機的設計。