狀態機器的原理簡析及重要用途,原理簡析用途
作為一個碼農按俺的抽象能力確實不咋的,難道和我出身農家有關,所以我總把複雜和抽象的問題簡單化,具體化,大白話,恐怕別人聽不懂。今天我就把另一種技術也大白話吧!
一個應用的只所以能夠串起來,動起來就要有一個靈魂,就是怎麼實現具體的商務邏輯,實現的最佳方法就是狀態機器。
一個應用從發起到結束有一個完整的生命週期,它在整個生命中大部分時間處於某個穩定的狀態並且有用狀態的咱們稱它為穩態,在進入問穩態前他肯定要經曆各個不穩定點。狀態機器就是標記從不穩定點不斷遷移,最後進入問題狀態的全域變數。當然穩定點是相互,他也會從穩定點遷移到不穩定點,最後再遷移到這個穩定點。如:應用剛開始啟動時處於登陸初試化狀態(當有登陸失敗時進入登陸失敗狀態,這個狀態可以沒有),當登陸成功時處於登陸成功狀態(穩定點),這時你就可以進行各種操作了。當你玩膩了想換個帳戶了,就退出吧,那麼你就進入未登陸狀態(由於你在這個狀態通常不能做核心的事情,所以可以不稱它為穩定點),當你再次登陸成功,你就又進入登陸成功狀態。當你的退出應用了,那就不用記錄了吧。這個是最簡單的登陸狀態機器。類似的如接單業務的訂單狀態機器。有的應用要根據當時處於某些頁面,當關閉應用再開啟應用時,要進入上次的頁面。這最適合用狀態機器實現了。實際上很多人在用各種複雜的方式實現狀態機器,沒有用最簡單直接的方式實現。
狀態機器最簡單直白的描述是用一個枚舉類型的全域變數記錄應用所處不同的狀態,根據這個全域變數進入不同的頁面或處理不同的邏輯。一個應用可以有不同狀態機器(不同的枚舉類型的全域變數),枚舉類型的全域變數可以記錄到檔案中或資料庫中(如:Object Storage Service core dat中或檔案沙箱,MFC的對象持續化是存於資料庫中),下次登陸可以讀取這個枚舉類型的全域變數並且跳到不同的頁面和流程。
我做的一個APP的網路觸發式自動登入狀態機器枚舉類型:
typedef NS_ENUM(NSInteger,LOGIN_STATE) { LOGIN_STATE_INIT = 0, LOGIN_STATE_LOGIN_SUCESS, LOGIN_STATE_LOGINING, LOGIN_STATE_UNAUTO_LOGIN, LOGIN_STATE_UNNET_LOGIN, LOGIN_STATE_EXIT_LOGIN};
我做的一個APP的網路觸發式自動登入狀態機器邏輯圖:
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。