<audio class="audio-for-speech" src="/admin/blogs/2519501/"></audio>
<audio class="audio-for-speech" src="/admin/blogs/2519501/"></audio>
业务场景:
我们都玩过超级玛丽这款经典的游戏,里面有一个问题;就是玛丽的状态变化;
一、添加依赖
<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.enums.CurrentState; import com.example.demo.stateless4j.enums.Trigger; import com.github.oxo42.stateless4j.StateMachineConfig; public class StateConfig { public static StateMachineConfig<CurrentState, Trigger> config = new StateMachineConfig<>(); static { /** * 最初为small状态时 */ config.configure(CurrentState.SMALL) /** * 遇到蘑菇触发-->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); } }
四、测试
public class RunStateMachine { private static StateMachine<CurrentState,Trigger> stateMachine = new StateMachine<CurrentState, Trigger>(CurrentState.SMALL,StateConfig.config); @Test public void testStateMachine(){ stateMachine.fire(Trigger.FLOWER); System.out.println("currentState-->"+stateMachine.getState()); } }
来源:https://my.oschina.net/JackieRiver/blog/1595384
相关推荐
主要介绍了C# 状态机Stateless的的相关资料,文中讲解非常详细,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下
jar包,官方版本,自测可用
jar包,官方版本,自测可用
不要从概念上分析,事实上,static双向NAT是完全对称的,一对一的 ,也只有在BOX两边的网络在拓扑级别是完全对等的情形下,这种NAT或许才是有用的,Cisco设备经常处在这样的位置,比如一个很大的stub节点的出口位置...
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
TREX无国籍GUI应用程序提供了一种图形用户界面 。 描述和主要特点: TRex无状态GUI应用程序是基于JavaFX的应用程序。 该应用程序的主要功能可以分为树状部分(TRex管理,流量配置文件管理和数据包制作工具): ...
一、无状态组件 (Stateless Component) 二、无状态组件与组件的生命周期方法 三、无状态组件不支持 "ref" 四、无状态组件尚不支持 bab
无国籍四郎REST Web 服务中使用的 Shiro发射 mvn clean package spring-boot:run或在您的 IDE 中运行 Application.main()。初始化填写用户进行测试 curl -H "Content-Type: application/json" -X PUT ...
use Fluxer \ StateMachine ; $ phone = new StateMachine ( 'offHook' ); $ phone -> forState ( 'offHook' ) -> permit ( 'callDialed' , 'ringing' ); $ phone -> forState ( 'ringing' ) -> permit ( 'hungUp'...
stateless4j.zip,状态机的fluent接口轻量级java状态机
无状态的 一个用DELPHI代码创建状态机的简单库 这是的delphi克隆
状态管理器 背景和目标 NStateManager是一个 .Net 库,用于管理: 类型 状态间 根据触发事件和当前状态的额外 ...stateMachine = new StateMachine ( stateAccessor : ( sale ) => sale . State , // stateAcc
CRYPTO 2009的一篇文章,提出了一个标准模型下基于RSA的短签名方案
phoneCall := stateless . NewStateMachine ( stateOffHook ) phoneCall . Configure ( stateOffHook ). Permit ( triggerCallDialed , stateRinging ) phoneCall . Configure ( stateRinging ). OnEntryFrom ( ...