一.基本流程 1.設定一個GlobalStates的檔案 用來把所有StateMachine要用到的Action與State設定在這檔案上 2.Facade 原本會在fcade內設定Notication command Name,並註冊所有的 registerCommand,若使用StateMachine,則只要註冊StartupCommand 即可,也不用宣告Notication command Name 全部動作都搬到InjectFSMCommand內 3.在StartupCommand內 addSubCommand(InjectFSMCommand) 4.InjectFSMCommand override execute()並在裡面執行 1.registerCommand 原本在fscade上註冊command都搬到這裡 且使用的command名稱都是放在GlobalStates內 2.定義fsm要設定的state xml, 3.var injector:FSMInjector = new FSMInjector( fsm ); injector.inject(); 3.當要執行指令時 利用sendNotification(StateMachine.ACTION,null,"ACTION_STATE") 第二個參數是夾帶的data第三個參數是要執行的Action名稱 (名稱都定義在GlobalState內) 4.當有人發出Action的Notifictation時 會去檢查state xml內的架構 在目前所在的state內找到是否有對應的transition action名稱 如果有,就會跳到這個transition target所設定的state上 (此時,state便會轉移)轉移的同時, 也會是執行這state所設定entering的command 二.運作原理 fsm定義的重點是,系統都會保持在某一個你定義的state狀態下, 譬如說在fsm設定了initial後,如果沒有其他異動, 系統的狀態就是保持在initial所設定的那個狀態 而在state下面定義了在這state下所允許的所有動作 (transition的action name)並定義了這個 transition是要往哪裡去(要跳到哪一個state上) 當有動作被觸發(也就是透過sendNotification發出來) 系統會在目前的state下檢查是否有跟sendNotification 所發出的Action_State相符合的transition action name, 如果有,就會跳到這個transition所設定的target state上 並執行這state上的entering動作 二.fsm定義 1.initial:設定一開始要進入哪一個state(並會執行那個state的entering command) 2. name:定義這個state名稱(這有定義在GlobalStates內) entering:進入這state時要執行的command(Action Command名稱也設定在) exiting:當要離開這個state時,會執行到對應的command changed: 3. action:StateMachine.ACTION Notification type的名稱 target:想要轉換的目標state name
2010年1月21日 星期四
PureMVC-StateMachine memo
訂閱:
張貼留言 (Atom)
沒有留言:
張貼留言