stateless java_JAVA — stateless4j StateMachine 使用浅析(二)

stateless java_JAVA — stateless4j StateMachine 使用浅析(二)回顾 在上一篇文章中 我们介绍了 stateless4js 的使用入门 这一篇我们介绍 Exit amp amp EntryAction 废话不多说 showyoutheco importcom github oxo42 stateless4j StateMachine CreatedbyAdm

回顾:

在上一篇文章

中,我们介绍了stateless4j statemachine的使用入门,这一篇我们介绍 Exit && Entry Action;

废话不多说,show you the code:

import com.github.oxo42.stateless4j.StateMachineConfig;

/

* Created by Administrator on 2017/12/26.

*

* state和trigger注册

*/

public class StateConver {

public static StateMachineConfig 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.github.oxo42.stateless4j.delegates.Action1;

import com.github.oxo42.stateless4j.transitions.Transition;

/

* Created by Administrator on 2017/12/27.

*

* ExitAction实现类

*/

public class ExitAction implements Action1> {

@Override

public void doIt(Transition arg1) {

System.out.println(“OUT FROM :” + arg1.getSource());

}

}

import com.github.oxo42.stateless4j.delegates.Action1;

import com.github.oxo42.stateless4j.transitions.Transition;

/

* Created by Administrator on 2017/12/27.

*

* EntryAction实现类

*/

public class EntryAction implements Action1> {

@Override

public void doIt(Transition arg1) {

System.out.println(“ENTRY TO : ” +arg1.getDestination());

}

}

/

* Created by Administrator on 2017/12/26.

*

* 状态机测试类

*/

public class RunStateMachine {

private static StateMachine stateMachine = new StateMachine(CurrentState.SMALL,StateConver.config);

@Test

public void testStateMachine(){

stateMachine.fire(Trigger.FLOWER);

System.out.println(“currentState–>”+stateMachine.getState());

}

}

依旧运行这个测试类,查看输出日志为:

2017-12-27 23:30:57.469 myAppName [main] INFO com.github.oxo42.stateless4j.StateMachine – Firing FLOWER

OUT FROM :SMALL

currentState–>ATTACH

Process finished with exit code 0

成功触发exit动作;

同样的,我们可以触发一个EntryAction动作,

@Test

public void testStateMachine(){

stateMachine.fire(Trigger.FLOWER);

System.out.println(“currentState–>”+stateMachine.getState());

stateMachine.fire(Trigger.MONSTER);

}

2017-12-27 23:41:32.893 myAppName [main] INFO com.github.oxo42.stateless4j.StateMachine – Firing FLOWER

OUT FROM :SMALL

currentState–>ATTACH

2017-12-27 23:41:32.896 myAppName [main] INFO com.github.oxo42.stateless4j.StateMachine – Firing MONSTER

ENTRY TO : SMALL

Process finished with exit code 0

该包给我们提供了可以传入不同个数参数的Action及Action1,Action2… …等接口,可以适应不同场合的需要去实现;

其中Transition对象为一个包含变化前后state和当前trigger对象,通过get方法获得;

另外还提供了Func接口和BooleanFunc接口,需要的时候可以使用;

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/221799.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 下午5:16
下一篇 2026年3月17日 下午5:16


相关推荐

  • 《黑马》——C++核心编程

    《黑马》——C++核心编程前言 配套视频 https www bilibili com video BV1et411b73Z from search amp seid 只是为方便学习 不做其他用途 在此发布 C 基础入门部分配套讲义 原作者为黑马程序 C 核心编程本阶段主要针对 C 面向对象编程技术做详细讲解 探讨 C 中的核心和精髓 1 内存分区模型 C 程序在执行时 将内存大方向划分为 4 个区域代码区 存放函数体的二进制代码 由操作系统进行管理的全局区 存放全局

    2026年3月20日
    1
  • 初探js逆向「建议收藏」

    初探js逆向「建议收藏」转载自三尾先生博客初探js逆向在开始之前想先说下阅读完三尾先生这篇文章的一点个人理解,文章写得挺好的,很值得新手学习了解,首先谈下逆向激活成功教程思路1.需要逆向的时候一般是遇到了加密问题,加密情况有参数加密,有结果加密。但不管怎样的加密只要页面能正常显示,那就有解密过程!2.先找到加密的字段名,通过字段名在sources全局搜索3.在含有这些字段的位置打断点,一般sources里看到的会是一行的压缩代码,我们可以通过点击左下角的双大括号格式化js代码然后通过断点一步步查看参数在哪一步骤发生了变

    2022年6月22日
    47
  • java 取绝对值

    java 取绝对值使用 Math abs x Integera 1 doubled 2 floatf 3 Math abs a

    2026年3月19日
    1
  • 如何找回被盗的微信号(百分百成功)[通俗易懂]

    如何找回被盗的微信号(百分百成功)[通俗易懂]见到这篇文章的小伙伴,可能是被领皮肤、送福利等诱导活动被走微信号,这帮不法分子把骗取你们的微信号,以300-1000不等价格卖给黑色产业链,如果不法分子利用你的微信号去做违法的事情,警察也会查到你,因为你的微信号是实名认证了的。如果你的微信号有钱财也会被盗刷走。(请大家保护好自己微信号,不要轻易把微信帐号+密码+手机等给别人)记住:只要是你的实名微信号,就一定可以找回来,现在小编就教大家如何找回第一步:骗子要求你卸载客户端申诉方法第二步:没有卸载微信客户端申诉方法第一步:这是卸载过微信客户端申诉

    2022年5月15日
    197
  • OpenClaw v2026.3.12 离线源码构建与 Docker 部署完整教程

    OpenClaw v2026.3.12 离线源码构建与 Docker 部署完整教程

    2026年3月14日
    1
  • 用matlab绘制线性分段函数图像[通俗易懂]

    用matlab绘制线性分段函数图像[通俗易懂]假设线性分段函数如下所示在matlab中建立m文件:输入以下代码:x=0:0.01:5;y=zeros(size(x));fori=1:length(x)ifx(i)<0.9y(i)=0;elseifx(i)>=0.9&&x(i)<4.34y(i)=29.0698.*x(i)-26.1628;elsey(i)=100;endend

    2022年5月20日
    60

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号