这一篇我们介绍 Exit && Entry Action
一、依赖
<dependency>
<groupId>com.github.oxo42</groupId>
<artifactId>stateless4j</artifactId>
<version>2.5.0</version>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-jdk14</artifactId>
</exclusion>
</exclusions>
</dependency>
二、枚举类
/**
*
* 超级玛丽所有存在的状态state
*/
public enum CurrentState {
/**
* 初始化时小形态
*/
SMALL,
/**
* 吃到一个蘑菇时的大形态
*/
BIG,
/**
* 吃到花朵,可攻击形态
*/
ATTACH,
/**
* 死亡
*/
DEAD
}
/**
*
* 超级玛丽会遇到触发状态改变的trigger
*/
public enum Trigger {
/**
* 蘑菇
*/
MUSHROOM,
/**
* 花朵
*/
FLOWER,
/**
* 妖怪
*/
MONSTER
}
三、配置信息
import com.example.demo.stateless4j.action.EntryAction;
import com.example.demo.stateless4j.action.ExitAction;
import com.example.demo.stateless4j.enums.CurrentState;
import com.example.demo.stateless4j.enums.Trigger;
import com.github.oxo42.stateless4j.StateMachineConfig;
public class StateConfig2 {
public static StateMachineConfig<CurrentState, Trigger> config = new StateMachineConfig<>();
static {
/**
* 最初为small状态时
*/
config.configure(CurrentState.SMALL)
/**
* 从当前状态改变时所触发的动作
*/
.onExit(new ExitAction())
/**
* 改变到当前状态时所触发的动作
*/
.onEntry(new EntryAction())
/**
* 遇到蘑菇触发-->big状态
*/
.permit(Trigger.MUSHROOM,CurrentState.BIG)
/**
* 花朵触发,-->直接变为可攻击状态
*/
.permit(Trigger.FLOWER,CurrentState.ATTACH)
/**
* 妖怪触发,死亡状态
*/
.permit(Trigger.MONSTER,CurrentState.DEAD);
/**
* 最初为big状态
*/
config.configure(CurrentState.BIG)
/**
* 蘑菇触发,状态不变,
* permitReentry方法state变化相同,但具体执行过程有一些区别
*/
.ignore(Trigger.MUSHROOM)
.permit(Trigger.FLOWER,CurrentState.ATTACH)
.permit(Trigger.MONSTER,CurrentState.SMALL);
config.configure(CurrentState.ATTACH)
.ignore(Trigger.MUSHROOM)
.ignore(Trigger.FLOWER)
.permit(Trigger.MONSTER,CurrentState.SMALL);
config.configure(CurrentState.DEAD)
.ignore(Trigger.MUSHROOM)
.ignore(Trigger.FLOWER)
.ignore(Trigger.MONSTER);
}
}
四、触发动作
import com.example.demo.stateless4j.enums.CurrentState;
import com.example.demo.stateless4j.enums.Trigger;
import com.github.oxo42.stateless4j.delegates.Action1;
import com.github.oxo42.stateless4j.transitions.Transition;
public class EntryAction implements Action1<Transition<CurrentState, Trigger>> {
@Override
public void doIt(Transition<CurrentState, Trigger> arg1) {
System.out.println("ENTRY TO : " +arg1.getDestination());
}
}
import com.example.demo.stateless4j.enums.CurrentState;
import com.example.demo.stateless4j.enums.Trigger;
import com.github.oxo42.stateless4j.delegates.Action1;
import com.github.oxo42.stateless4j.transitions.Transition;
public class ExitAction implements Action1<Transition<CurrentState, Trigger>> {
@Override
public void doIt(Transition<CurrentState, Trigger> arg1) {
System.out.println("OUT FROM :" + arg1.getSource());
}
}
五、测试
private static StateMachine<CurrentState, Trigger> stateMachine = new StateMachine<CurrentState, Trigger>(CurrentState.SMALL, StateConfig2.config);
@Test
public void testStateMachine(){
stateMachine.fire(Trigger.FLOWER);
System.out.println("currentState-->"+stateMachine.getState());
stateMachine.fire(Trigger.MONSTER);
}
来源:https://my.oschina.net/JackieRiver/blog/1595876
分享到:
相关推荐
主要介绍了C# 状态机Stateless的的相关资料,文中讲解非常详细,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下
jar包,官方版本,自测可用
jar包,官方版本,自测可用
如果你在寻找Linux上配置诸如Cisco设备上的static双向NAT的方法,这个或许就是你想要的; what?你觉得它完不成PAT?是的,它不行。但是想做PAT为何不使用现有的iptables实现呢?它可以自动为你解决元组唯一性问题...
We present Greedy Perimeter Stateless Routing (GPSR), a novel routing protocol for wireless datagram networks that uses the po- sitions of routers and a packet's destination to make packet for- ...
short and stateless signatures from the RSA assumption.pdf 数字签名 RSA 标准模型 可证明安全
trex stateless手册说明文档
有状态stateful与无状态stateless地址转换.docx
一、无状态组件 (Stateless Component) 二、无状态组件与组件的生命周期方法 三、无状态组件不支持 "ref" 四、无状态组件尚不支持 bab
无国籍四郎REST Web 服务中使用的 Shiro发射 mvn clean package spring-boot:run或在您的 IDE 中运行 Application.main()。初始化填写用户进行测试 curl -H "Content-Type: application/json" -X PUT ...
stateless4j.zip,状态机的fluent接口轻量级java状态机
TRex无状态GUI TREX无国籍GUI应用程序提供了一种图形用户界面 。 描述和主要特点: TRex无状态GUI应用程序是基于JavaFX的应用程序。 该应用程序的主要功能可以分为树状部分(TRex管理,流量配置文件管理和数据包...
phoneCall := stateless . NewStateMachine ( stateOffHook ) phoneCall . Configure ( stateOffHook ). Permit ( triggerCallDialed , stateRinging ) phoneCall . Configure ( stateRinging ). OnEntryFrom ( ...
资源来自pypi官网。 资源全名:flask-stateless-auth-0.0.13.tar.gz
安全无状态样本Spring 安全无状态宁静示例有什么特点? 基于spring-security的无状态宁静架构要求jdk1.8 弹簧 4.1+ 弹簧安全 3.2+ spring-data-mongodb 1.6+ 缓存 2.9+ Hibernate 4.3+ 时髦 2.3+如何首先,运行测试...
无状态流 用于通用.NET开发的流类库。 NuGet软件包
react-native-stateless-form, 无状态的用于响应本机的窗体组件 react-native-stateless-form不再担心滚动和聚焦表单字段轻松显示图标和内联错误消息使用你想要的任何表单状态管理工具屏幕捕获 它做什么它通过...