概述
2019独角兽企业重金招聘Python工程师标准>>>
前面的两篇文章
https://my.oschina.net/u/3220575/blog/1595384
https://my.oschina.net/u/3220575/blog/1595876
主要介绍了stateless4j StateMachine在我们现有代码里面如何使用,这一张我们来简单分析一下其源码;
protected void publicFire(T trigger, Object... args) {
logger.info("Firing " + trigger);
TriggerWithParameters<S, T> configuration = config.getTriggerConfiguration(trigger);
if (configuration != null) {
configuration.validateParameters(args);
}
TriggerBehaviour<S, T> triggerBehaviour = getCurrentRepresentation().tryFindHandler(trigger);
//1.当没有对应的trigger时,执行doIt方法,会抛出异常,提示建议ignore当前的trigger
if (triggerBehaviour == null) {
unhandledTriggerAction.doIt(getCurrentRepresentation().getUnderlyingState(), trigger);
return;
}
//2.得到source状态
S source = getState();
OutVar<S> destination = new OutVar<>();
//3.在这里判断当初注册trigger时使用的是permit OR ignore,若是permit则返回为true,若是ignore返回为false
if (triggerBehaviour.resultsInTransitionFrom(source, args, destination)) {
//4.new了一个transition 的上下文对象,并将source,trigger及destination装载进去
Transition<S, T> transition = new Transition<>(source, destination.get(), trigger);
//5.执行exitAction
getCurrentRepresentation().exit(transition);
//6.改变statemachine的state为target状态
setState(destination.get());
//7.执行entryAction
getCurrentRepresentation().enter(transition, args);
}
}
为stateless4j StateMachine的核心方法,当执行fire去触发某一个trigger时,会执行上面的方法;
通过剖析我们可以知道,
public class StateRepresentation<S, T> {
private final S state;
private final Map<T, List<TriggerBehaviour<S, T>>> triggerBehaviours = new HashMap<>();
private final List<Action2<Transition<S, T>, Object[]>> entryActions = new ArrayList<>();
private final List<Action1<Transition<S, T>>> exitActions = new ArrayList<>();
private final List<StateRepresentation<S, T>> substates = new ArrayList<>();
private StateRepresentation<S, T> superstate; // null
...
...
}
所有的trigger触发器及对应的行为,exit和entry动作实现都保存在上面这个对象中,运行时根据当前所处的state得到对应的StateRepresentation对象,并从中根据trigger得到destination,并执行exit和entry方法;
转载于:https://my.oschina.net/JackieRiver/blog/1595884
最后
以上就是虚拟电话为你收集整理的JAVA -- stateless4j StateMachine 使用浅析(三)的全部内容,希望文章能够帮你解决JAVA -- stateless4j StateMachine 使用浅析(三)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复