这两种数据交换
和外界实现了解耦隔离。
因此好的状态模式实现必须有下列步骤:
(1)将每个状态变成State的子类,实现每个状态对象化。
(2)在每个状态中,封装着进入下一个状态
具体
下面是一个子状态代码:
public class Running extends StateT{
//
public void run(StateOwner stateOwner){
stateOwner.setCurrentState(this);
}
//转换到下一个状态的规则
//当前是Running状态,下一个状态
//状态,但是绝对不会是Not_Started这样的状态
//转换规则在这里得到了体现。
public State next(Event e) {
if(transitions == null){
addEventState(new EventImp("PAUSE"), new Suspended());
addEventState(new EventImp("END"), new Completed());
addEventState(new EventImp("STOP"), new Aborted());
}
return super.next(e);
}
}
外界直接调用 StateMachine的关键方法transition;实行状态的自动转变。
public class StateMachine {
/**
* 状态切换
* 根据Event参数,运行相应的状态。
* 1. 获得当前状态
* 2. 使用当前状态的next()转换
* |Event
* ___currentState__|______newState___
*
* @param inputs
*/
public final void transition(String taskid, Event e) throws Exception {
State currentState = readCurrentState(taskid); //从数据库获得当前状态
StateOwner stateOwner = new StateOwner(taskid, currentState);
//转换状态
currentState = currentState.next(e);
if (currentState != null) {
currentState.run(stateOwner);
saveCurrentState(stateOwner); //保存当前状态
}
}
}
上一页 1 2 3下一页
