public class StateMachine<STATE,LISTENER>
extends java.lang.Object
StateMachine クラスは状態マシンを実現するクラス。
例: ActiveObjectは状態マシンを持つアクティブオブジェクトであるとする。
状態は3状態 INACTIVE, ACTIVE, ERROR あり、各状態でのEntryやExit動作を
定義したいとすると、以下のように実現される。
class ActiveObject { public ActiveObject() { m_sm = new StateMachine(3); m_sm.setListener(this); m_sm.setExitAction(INACTIVE, new inactiveExit()); : m_sm.setPostDoAction(ERROR, new errorPostDo()); m_sm.setTransitionAction(new tratransitionnsition()); StateHolder st = new StateHolder(); st.prev = LifeCycleState.INACTIVE_STATE; st.curr = LifeCycleState.INACTIVE_STATE; st.next = LifeCycleState.INACTIVE_STATE; m_sm.setStartState(st); m_sm.goTo(LifeCycleState.INACTIVE_STATE); } private class inactiveExit implements StateAction { public Object doAction(StateHolder state) { } } : private class errorPostDo implements StateAction { public Object doAction(StateHolder state) { } } private class tratransitionnsition implements StateAction { public Object doAction(StateHolder state) { } } private StateMachine状態を持たせたいクラスは以下の条件を満たすように実装しなければならない。m_sm; }
修飾子とタイプ | フィールドと説明 |
---|---|
protected java.util.HashMap<STATE,StateAction> |
m_do
Do action 用コールバック関数
|
protected java.util.HashMap<STATE,StateAction> |
m_entry
Entry action 用コールバック関数
|
protected java.util.HashMap<STATE,StateAction> |
m_exit
Exit action 用コールバック関数
|
protected LISTENER |
m_listener
コールバック関数用リスナー
|
protected int |
m_num
状態数
|
protected java.util.HashMap<STATE,StateAction> |
m_postdo
PostDo action 用コールバック関数
|
protected java.util.HashMap<STATE,StateAction> |
m_predo
PreDo action 用コールバック関数
|
protected StateHolder<STATE> |
m_states
現在の状態情報
|
protected StateAction |
m_transit
State transition action 用コールバック関数
|
コンストラクタと説明 |
---|
StateMachine(int num_of_state)
コンストラクタ
|
修飾子とタイプ | メソッドと説明 |
---|---|
STATE |
getState()
現在の状態を取得する
|
StateHolder<STATE> |
getStates()
状態を取得する
{@.ja 状態情報を取得する。
|
void |
goTo(STATE state)
状態を遷移。
|
boolean |
isIn(STATE state)
現在状態を確認。
|
boolean |
setDoAction(STATE state,
StateAction call_back)
Do action 関数を登録する。
|
boolean |
setEntryAction(STATE state,
StateAction call_back)
Entry action 関数を登録する。
|
boolean |
setExitAction(STATE state,
StateAction call_back)
Exit action 関数を登録する。
|
void |
setListener(LISTENER listener)
Listener オブジェクトを登録する。
|
void |
setNOP()
NOP関数を登録する。
|
boolean |
setPostDoAction(STATE state,
StateAction call_back)
PostDo action 関数を登録する。
|
boolean |
setPreDoAction(STATE state,
StateAction call_back)
PreDo action 関数を登録する。
|
void |
setStartState(StateHolder states)
初期状態をセットする。
|
boolean |
setTransitionAction(StateAction call_back)
State transition action 関数を登録する。
|
void |
worker_do() |
void |
worker_post() |
void |
worker_pre() |
void |
worker()
駆動関数。
|
protected int m_num
protected LISTENER m_listener
protected java.util.HashMap<STATE,StateAction> m_entry
protected java.util.HashMap<STATE,StateAction> m_predo
protected java.util.HashMap<STATE,StateAction> m_do
protected java.util.HashMap<STATE,StateAction> m_postdo
protected java.util.HashMap<STATE,StateAction> m_exit
protected StateAction m_transit
protected StateHolder<STATE> m_states
public StateMachine(int num_of_state)
num_of_state
- ステートマシン中の状態数
public void setNOP()
NOP関数(何もしない関数)を登録する。
public void setListener(LISTENER listener)
各種アクション実行時に呼び出される Listener オブジェクトを 登録する。
listener
- 登録対象リスナーオブジェクト
public boolean setEntryAction(STATE state, StateAction call_back)
各状態に入った際に実行される Entry action 用コールバック関数を 登録する。
state
- 登録対象状態
call_back
- Entry action 用コールバック関数
public boolean setPreDoAction(STATE state, StateAction call_back)
各状態内で実行される PreDo action 用コールバック関数を登録する。
state
- 登録対象状態
call_back
- PreDo action 用コールバック関数
public boolean setDoAction(STATE state, StateAction call_back)
各状態内で実行される Do action 用コールバック関数を登録する。
state
- 登録対象状態
call_back
- Do action 用コールバック関数
public boolean setPostDoAction(STATE state, StateAction call_back)
各状態内で実行される PostDo action 用コールバック関数を登録する。
state
- 登録対象状態
call_back
- PostDo action 用コールバック関数
public boolean setExitAction(STATE state, StateAction call_back)
各状態内で実行される Exit action 用コールバック関数を登録する。 Set callback function for Exit action that is executed in each state.
state
- 登録対象状態
call_back
- Exit action 用コールバック関数
public boolean setTransitionAction(StateAction call_back)
状態遷移時に実行される State transition action 用コールバック関数を 登録する。
call_back
- State transition 用コールバック関数
public void setStartState(StateHolder states)
ステートマシンの初期状態を設定する。
states
- 初期状態(1つ前,現在,遷移予定)
public StateHolder<STATE> getStates()
状態情報を取得する。 現在の状態、1つ前の状態、遷移予定の状態を取得することができる。
public STATE getState()
public boolean isIn(STATE state)
現在の状態が、引数で指定した状態と一致するか確認する。
state
- 確認対象状態
public void goTo(STATE state)
指定した状態に状態を遷移する。 本関数は次状態を強制的にセットする関数である。 このため、遷移の可否は、ユーザが現在状態を取得し判断するロジックを 実装しなければならない。 遷移先が現在の状態と同じ場合には、自己遷移フラグをセットする。
state
- 遷移先状態
public void worker()
ステートマシンの駆動関数。 実際の状態遷移および状態遷移発生時の各アクションの呼びだしを実行する。
public void worker_pre()
public void worker_do()
public void worker_post()