欢迎光临中国工作流管理网
加入收藏夹 | English
当前位置:主页>工作流技术>
从工作流状态机实践中总结状态模式使用心得
来源:  作者:本站


这两种数据交换以分别通过StateOwner和StateMachine与整个状态机实现数据交换,这样,具体状态和状态切换也
和外界实现了解耦隔离。

因此好的状态模式实现必须有下列步骤:
(1)将每个状态变成State的子类,实现每个状态对象化。
(2)在每个状态中,封装着进入下一个状态能规则,这些规则是状态变化的核心,换句话说,统一了状态转换的规则。
具体采取run和next这样的转换行为。

下面是一个子状态代码:



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); //保存当前状态
}
}

}

——摘自《J道论坛》
上一页 1 2 3下一页
免责声明:凡本站注明来源为xx所属媒体的作品,均转载自其它媒体转载目的在于传递更多信息,并不代表本站赞同其观点和对其真实性负责。