这一篇我们介绍 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
分享到:
相关推荐
_machine = new StateMachine<State, Trigger>(() => _state, s => _state = s); _machine.Configure(State.OffHook) .Permit(Trigger.CallDialed, State.Ringing); _machine.Configure(State.Ringing) ....
jar包,官方版本,自测可用
jar包,官方版本,自测可用
Maven <dependency> <groupId>com.github.stateless4j</groupId> <artifactId>stateless4j</artifactId> <version>2.6.0</version> 介绍直接在 Java 代码中创建状态机和基于轻量级状态机的工作流。...
描述中提到的"stateless4j.zip"是一个与状态机相关的开源项目,它提供了Fluent接口,使得在Java中实现和操作状态机变得更加简洁和直观。状态机是一种计算机科学的概念,用于建模有限的、离散的状态转换系统。在软件...
如果你在寻找Linux上配置诸如Cisco设备上的static双向NAT的方法,这个或许就是你想要的; what?你觉得它完不成PAT?是的,它不行。但是想做PAT为何不使用现有的iptables实现呢?它可以自动为你解决元组唯一性问题...
大多数签名方案可以进一步分为有状态(Stateful)和无状态(Stateless)两种。有状态签名方案通常涉及更多的计算资源,而无状态签名方案则更加简洁高效。 #### 主要研究成果 文档的主要贡献是一种新的数字签名方案...
《GPSR: Greedy Perimeter Stateless Routing for Wireless Networks》是一篇介绍了一种新型无线数据报网络路由协议——贪婪周界无状态路由(GPSR)的研究文章。该协议通过利用路由器的位置信息以及数据包的目的地来...
二、无状态(stateless)地址转换技术 无状态(stateless)地址转换技术是指XLAT在地址转换过程中不维持IPv4/IPv6转换状态,而是通过映射算法唯一确定IPv4地址和IPv6地址之间的关系。这种技术不需要XLAT记录任何session...
状态机(StateMachine)是一种在计算机科学和编程领域中广泛应用的设计模式,它用于描述对象或系统在不同时间点的行为变化。这种模式将一个实体的状态(如程序、设备或过程)定义为一系列可转换的状态,并规定了从一...
该文档名为“trex_stateless.pdf”,说明手册中涉及的内容主要集中于TRex的状态无感知(stateless)模式。 手册首先明确了目标受众,接着详细说明了TRex在状态无感知模式下的高级功能。首先介绍了流量配置文件示例...
这个库可能是基于开源项目 "finite-state-machine" 的 DELPHI 版本,为 DELPHI 开发者提供了相同的便利性。 状态机的实现通常包括以下几个关键组成部分: 1. **状态(State)**:每个状态代表对象的一种行为模式。...
phoneCall := stateless . NewStateMachine ( stateOffHook ) phoneCall . Configure ( stateOffHook ). Permit ( triggerCallDialed , stateRinging ) phoneCall . Configure ( stateRinging ). OnEntryFrom ( ...
标题 "Be.Stateless.Stream:用于通用.NET开发的流类库" 指向的是一个专门设计用于.NET平台的开源流处理库。这个库的核心理念是提供一套无状态的流操作工具,以支持开发者进行高效、灵活的数据处理。无状态意味着在...
标题中的“PyPI官网下载 | flask-stateless-auth-0.0.13.tar.gz”表明这是一个从Python Package Index (PyPI) 官网上获取的压缩包文件,名为“flask-stateless-auth-0.0.13.tar.gz”。PyPI是Python社区的主要资源库...
一、无状态组件 (Stateless Component) 二、无状态组件与组件的生命周期方法 三、无状态组件不支持 "ref" 四、无状态组件尚不支持 bab
无国籍四郎REST Web 服务中使用的 Shiro发射 mvn clean package spring-boot:run或在您的 IDE 中运行 Application.main()。初始化填写用户进行测试 curl -H "Content-Type: application/json" -X PUT ...