`

stateless4j StateMachine (二)

 
阅读更多

这一篇我们介绍 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

    _machine = new StateMachine&lt;State, Trigger&gt;(() =&gt; _state, s =&gt; _state = s); _machine.Configure(State.OffHook) .Permit(Trigger.CallDialed, State.Ringing); _machine.Configure(State.Ringing) ....

    com.googlecode.stateless4j-osgi-1.0.jar

    jar包,官方版本,自测可用

    com.googlecode.stateless4j-osgi-1.0.1.jar

    jar包,官方版本,自测可用

    pa-client_2.10-4.9.zip

    描述中提到的"stateless4j.zip"是一个与状态机相关的开源项目,它提供了Fluent接口,使得在Java中实现和操作状态机变得更加简洁和直观。状态机是一种计算机科学的概念,用于建模有限的、离散的状态转换系统。在软件...

    一个iptables的stateless NAT模块实现

    如果你在寻找Linux上配置诸如Cisco设备上的static双向NAT的方法,这个或许就是你想要的; what?你觉得它完不成PAT?是的,它不行。但是想做PAT为何不使用现有的iptables实现呢?它可以自动为你解决元组唯一性问题...

    GPSR: Greedy Perimeter Stateless Routing for Wireless Networks

    《GPSR: Greedy Perimeter Stateless Routing for Wireless Networks》是一篇介绍了一种新型无线数据报网络路由协议——贪婪周界无状态路由(GPSR)的研究文章。该协议通过利用路由器的位置信息以及数据包的目的地来...

    有状态stateful与无状态stateless地址转换.docx

    二、无状态(stateless)地址转换技术 无状态(stateless)地址转换技术是指XLAT在地址转换过程中不维持IPv4/IPv6转换状态,而是通过映射算法唯一确定IPv4地址和IPv6地址之间的关系。这种技术不需要XLAT记录任何session...

    StateMachine

    状态机(StateMachine)是一种在计算机科学和编程领域中广泛应用的设计模式,它用于描述对象或系统在不同时间点的行为变化。这种模式将一个实体的状态(如程序、设备或过程)定义为一系列可转换的状态,并规定了从一...

    trex_stateless.pdf

    该文档名为“trex_stateless.pdf”,说明手册中涉及的内容主要集中于TRex的状态无感知(stateless)模式。 手册首先明确了目标受众,接着详细说明了TRex在状态无感知模式下的高级功能。首先介绍了流量配置文件示例...

    stateless:一个用DELPHI代码创建状态机的简单库

    这个库可能是基于开源项目 "finite-state-machine" 的 DELPHI 版本,为 DELPHI 开发者提供了相同的便利性。 状态机的实现通常包括以下几个关键组成部分: 1. **状态(State)**:每个状态代表对象的一种行为模式。...

    stateless:转到用于创建状态机的库

    phoneCall := stateless . NewStateMachine ( stateOffHook ) phoneCall . Configure ( stateOffHook ). Permit ( triggerCallDialed , stateRinging ) phoneCall . Configure ( stateRinging ). OnEntryFrom ( ...

    Be.Stateless.Stream:用于通用.NET开发的流类库

    标题 "Be.Stateless.Stream:用于通用.NET开发的流类库" 指向的是一个专门设计用于.NET平台的开源流处理库。这个库的核心理念是提供一套无状态的流操作工具,以支持开发者进行高效、灵活的数据处理。无状态意味着在...

    PyPI 官网下载 | flask-stateless-auth-0.0.13.tar.gz

    标题中的“PyPI官网下载 | flask-stateless-auth-0.0.13.tar.gz”表明这是一个从Python Package Index (PyPI) 官网上获取的压缩包文件,名为“flask-stateless-auth-0.0.13.tar.gz”。PyPI是Python社区的主要资源库...

    csy512889371#reactLearn#React学习笔记_无状态组件(Stateless Component) 与高阶

    一、无状态组件 (Stateless Component) 二、无状态组件与组件的生命周期方法 三、无状态组件不支持 "ref" 四、无状态组件尚不支持 bab

    stateless-shiro:REST Web 服务中使用的 Shiro

    无国籍四郎REST Web 服务中使用的 Shiro发射 mvn clean package spring-boot:run或在您的 IDE 中运行 Application.main()。初始化填写用户进行测试 curl -H "Content-Type: application/json" -X PUT ...

    DV8677_formatted_v2(Stateless Desktops at The Bank of Tokyo-.pdf

    DV8677_formatted_v2(Stateless Desktops at The Bank of Tokyo-.pdf

Global site tag (gtag.js) - Google Analytics