springboot~stateless4j实现状态机

这篇具有很好参考价值的文章主要介绍了springboot~stateless4j实现状态机。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

状态机,包括了状态和动作,某个状态下,只能执行某些动作,如果动作不匹配,状态是不会进行变更了,这样就保护了我们状态字段的准备性,不能随意改变,必须按着我们设计的规则进行状态的轮转。

Stateless实现的状态机

  1. Stateless:Stateless 是一个简单且易于使用的状态机库,它提供了基本的状态转换和动作执行功能。以下是一个使用 Stateless 实现的简单状态机示例:
import com.github.oxo42.stateless4j.StateMachine;
import com.github.oxo42.stateless4j.StateMachineConfig;
import com.github.oxo42.stateless4j.transitions.Transition;

public class StateMachineExample {
enum State {

		/**
		 * 表示电话机已经从底座拿起,但用户还没有拨打或者接听电话,此时电话处于空闲状态
		 */
		OFF_HOOK,
		/**
		 * 响铃
		 */
		RINGING,
		/**
		 * 连接
		 */
		CONNECTED,
		/**
		 * 表示通话的一方需要暂时挂起通话
		 */
		ON_HOLD

	}

	enum Trigger {

		/**
		 * 用户拨打电话并等待接听
		 */
		CALL_DIALED,
		/**
		 * 表示通话结束后挂断电话
		 */
		HUNG_UP,
		/**
		 * 表示接听方接通电话,此时双方正常通话。
		 */
		CALL_CONNECTED,
		/**
		 * 表示通话的一方需要暂时挂起通话
		 */
		PLACED_ON_HOLD,
		/**
		 * 表示恢复保持状态执行通话【与PLACED_ON_HOLD对应】
		 */
		TAKEN_OFF_HOLD,
		/**
		 * 留言
		 */
		LEFT_MESSAGE,
		/**
		 * 表示通话的一方结束通话并停止使用电话
		 */
		STOP_USING_PHONE

	}

    public static void main(String[] args) {
        // 创建状态机配置
        StateMachineConfig<State, Trigger> config = new StateMachineConfig<>();

        // 定义状态转换规则
        config.configure(State.OFF_HOOK)
                .permit(Trigger.CALL_DIALED, State.RINGING);

        config.configure(State.RINGING)
                .permit(Trigger.HUNG_UP, State.OFF_HOOK)
                .permit(Trigger.CALL_CONNECTED, State.CONNECTED);

        config.configure(State.CONNECTED)
                .permit(Trigger.LEFT_MESSAGE, State.OFF_HOOK)
                .permit(Trigger.HUNG_UP, State.OFF_HOOK)
                .permit(Trigger.PLACED_ON_HOLD, State.ON_HOLD);

        config.configure(State.ON_HOLD)
                .permit(Trigger.TAKEN_OFF_HOLD, State.CONNECTED)
                .permit(Trigger.HUNG_UP, State.OFF_HOOK);

        // 创建状态机实例
        StateMachine<State, Trigger> stateMachine = new StateMachine<>(State.OFF_HOOK, config);

        // 执行状态转换
        stateMachine.fire(Trigger.CALL_DIALED);
        stateMachine.fire(Trigger.CALL_CONNECTED);
        stateMachine.fire(Trigger.PLACED_ON_HOLD);
        stateMachine.fire(Trigger.TAKEN_OFF_HOLD);
        stateMachine.fire(Trigger.HUNG_UP);

        // 获取当前状态
        State currentState = stateMachine.getState();
        System.out.println("Current State: " + currentState);
    }
}

在上面的示例中,我们使用 StateMachine 类创建了一个状态机,并定义了状态(State)和触发器(Trigger)。通过配置状态转换规则,我们可以使用 fire() 方法触发状态转换。最后,我们获取当前状态并输出。文章来源地址https://www.toymoban.com/news/detail-499617.html

到了这里,关于springboot~stateless4j实现状态机的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • springboot日志使用 SLF4J+Logback 实现(springboot默认的日志实现),日志打印到控制台及日志输出到指定文件

    还是直接上代码 @Slf4j 这玩意 默认支持 不用引入 yml 配置文件 下面分享 xml 方式 在 资源目录下创建 logback-spring.xml 粘贴走 即可 重启 看控制台变化 还有磁盘 有没有写入 坑 : 我在创建的时候 发现 xml 没有生效 排查了半天 发现 在创建 logback-spring.xml 这个文件的时候 我不是手

    2024年04月22日
    浏览(80)
  • Java也能做OCR!SpringBoot 整合 Tess4J 实现图片文字识别

    先简单给没听过的xdm解释下,这里要分清楚Tesseract和Tess4j的区别。 Tesseract是一个开源的光学字符识别(OCR)引擎,它可以将图像中的文字转换为计算机可读的文本。支持多种语言和书面语言,并且可以在命令行中执行。它是一个流行的开源OCR工具,可以在许多不同的操作系统

    2024年02月04日
    浏览(37)
  • 23、springboot日志使用入门-- SLF4J+Logback 实现(springboot默认的日志实现),日志打印到控制台及日志输出到指定文件

    就是springboot的默认的日志依赖实现。创建项目的时候存在这个依赖里面。 下面的日志实现就是基于 SLF4J+Logback SLF4J+Logback:SLF4J是门面,Logback是实现 设置日志的级别,可通过以下方式: ▲ 改变Spring Boot的核心日志级别 ▲ 改变程序组件(包括所有各种框架)的核心日志级别

    2024年02月03日
    浏览(61)
  • Jmeter压力测试简单教程(包括服务器状态监控)

    前段时间公司需要对服务器进行压力测试,包括登录前的页面和登录后的页面,主要目的是测试负载均衡的实现效果。不知道是不是因为Jmeter不如loadRunner火爆还是什么,网上关于Jmeter的资料有很多但是大多千篇一律,要么简单弄个页面测试一下,要么全篇都是介绍很多和Jm

    2024年02月20日
    浏览(53)
  • SpringBoot结合Vue.js+axios框架实现增删改查功能+网页端实时显示数据库数据(包括删除多条数据)

    本文适用对象:已有基础的同学,知道基础的SpringBoot配置和Vue操作。 在此基础上本文实现基于SpringBoot和Vue.js基础上的增删改查和数据回显、刷新等。 实现步骤: 第1步:编写动态请求响应类:在启动类同父目录下创建controller包,在包下创建DataController类,添加@RestController、

    2024年02月04日
    浏览(50)
  • 最新版本Neo4j的安装、配置和一丢丢使用要点(包括jdk配置),超详细教程

    ●是根据各种文本和视频总结出来的蕴含本人血泪的经验教程 ●使用jgk17.0.8版本,与neo4j5.11.0版本 ●电脑为windows11 1.下载地址: https://www.oracle.com/java/technologies/downloads/  点击右边蓝色链接即可下载 2.安装 ①可以在电脑的C/D/E/F中选一个盘,先创建一个文件夹,用英文命名 ②

    2024年02月06日
    浏览(74)
  • springboot 关闭所有日志,包括起始springboot图标和运行输入日志

    关闭所有日志分2部分: 1 关闭运行输出日志 , 2 关闭springboot启动图标 在 application.properties 中 添加 例如:logging.level.com.example.license=off 注:off 表示关闭指定包下面的日志,也可以设置其他级别用来控制日志按等级输出 #日志级别 tracedebuginfowarnerrorfatal #默认级别为info,即默认打印

    2023年04月09日
    浏览(71)
  • springboot读取多文件配置(包括nacos)

    首先来简单了解一下这个类。 ResourceBundle类主要是用来 解决国际化和本地化问题 ,就我的理解,就是类似于前端界面的字体显示,国际化操作一般都要支持多国语言,那么这个ResourceBundle类就能够简单快速的解决这个问题。 同时,这个类只能支持读取properties属性文件,和

    2023年04月09日
    浏览(49)
  • Springboot整合TrueLicense(包括License的生成、安装和验证)

    软件许可(License)证书可以在软件产品交付的时候,对其使用时间以及使用范围进行授权。当用户申请(购买)改变使用时间和使用范围的时候,授权方可以为用户生成一个新的license替换原来的license即可,从而避免了修改源码、改动部署等繁琐操作。 在互联网通信中,为了

    2023年04月09日
    浏览(28)
  • springboot+neo4j

    请通过依赖项管理包含启动器模块并配置要使用的 Bolt URL,例如 spring.neo4j.uri=bolt://localhost:7687 。启动器假设服务器已禁用身份验证。由于 SDN 启动器依赖于 Java 驱动程序的启动器,因此此处所说的有关配置的所有内容也适用于此处。有关可用属性的参考,请在 spring.neo4j 命名

    2024年01月20日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包