android2.3中wifi的狀態都是在wifistatetracker中維護的,4.0中將wifi的狀態全部放到wifistatemachine中維護的。今天不是深究wifi的問題,只以wifi為例,來分析層次結構狀態機的原理。
wifistatemachine繼承於statemachine,statemachine是乙個層次結構的狀態機,它可以處理一些訊息,並維護乙個層次結構的狀態。
先來看看狀態是什麼?狀態很簡單,只有自已的名字(如"connecting"表示當前正在連線wifi),然後還有乙個處理函式processmessage,它接收乙個message引數,顧名思義,它是用來處理某個事件。另外還有兩個函式enter和exit,表示進入該狀態和退出該狀態作的一些一般操作,如enter可能會做一些初始化操作,而exit會做一些清理工作。
狀態機被創造後,需要初始化它的層次結構狀態,並設定其初始狀態。如下面一段**:
statemachine sm = /*create a state machine*/;
sm.add(mp0, null);
sm.add(mp1, mp0);
sm.add(ms2, mp1);
sm.add(ms3, ms2);
sm.add(ms4, ms2);
sm.add(ms1,mp1);
sm.add(ms5, ms1);
sm.add(ms0, mp0);
sm.setinitialstate(ms5);
初始後的狀態機形如乙個樹狀結構,如下所示:
mp0
/ \
mp1 ms0
/ \
ms2 ms1
/ \ \
ms3 ms4 ms5 ---> initial state
層次狀態機
我們知道狀態機是ai 當然,不光是ai了 中常用的一種架構,有很多中實現方式,總體來說對於表達簡單邏輯,還是很有幫助的,而且實現簡單,甚至用乙個switch case就可以了,但在實踐中狀態機有乙個致命的缺點,當狀態一旦多了之後,它的跳轉就會變的不可維護,假設有n個狀態的話,那我們就需要維護最多n ...
狀態機 狀態機0
近半年都忙於做專案,沒有太多的時間去整理和總結在專案中用過的技術 個人還是覺得技術需要總結提煉和沉澱的,忙到沒時間去總結提公升其實不 是什麼好事,這次講下狀態機,在戰鬥型別的遊戲中角色有多種不同的狀態,而狀態的切換錯綜複雜,23種設計模式中有一種模式叫做狀態模式,不過 這種模式是把狀態切換條件放到各...
python 狀態機 Python 狀態機
class statemachine def init self self.handlers 狀態轉移函式字典 self.startstate none 初始狀態 self.endstate 最終狀態集合 引數name為狀態名,handler為狀態轉移函式,end state表明是否為最終狀態 de...