• 状态机


    状态机设计

    1、选型

    (1)stateless4j

            stateless4j足够轻量,同步模型,在app中使用比较合适,但在服务端解决复杂业务场景上stateless4j确实略显单薄。
            例如对于持久化状态实现比较麻烦

    (2)squirrel foundation

    官网:http://hekailiang.github.io/squirrel/

    github:https://github.com/hekailiang/squirrel

    star:1.7k

    优点:

            stateMachine实例创建开销小,设计上就不支持单例复用,因此状态机的本身的生命流管理也更清晰,避免了类似spring statemachine复用statemachine导致的deadlock之类的问题

    缺点:

            builder.externalTransition().from("A").to("B").on(FSMEvent.ToB).callMethod("fromAToB");这种写法在编译时不容易发现错误

            切点粒度比较粗,要使用细粒度的切点需要自己实现模型相比较spring statemachine较为简单,实现复杂的多层状态模型需要在此基础上开发实现

    (3)spring statemachine:

    官网:https://projects.spring.io/spring-statemachine/

    github:https://github.com/spring-projects/spring-statemachine

    star:1.2k

    优点:

            分层状态机结构以简化复杂的状态配置。

            状态机区域提供更复杂的状态配置。

            触发器、转换、守卫和动作的使用。

            用于在 Spring 应用程序上下文之外轻松实例化的构建器模式

            基于 Zookeeper 的分布式状态机

            状态机事件侦听器。

            UML Eclipse Papyrus 建模。

            将机器配置存储在持久存储中。

            Spring IOC 集成将 bean 与状态机相关联。

    缺点:

            对于一些没有接入spring框架的应用接入比较困难

           接入学习成本相对较高,文档较少

           监听器、aop等组件模块都使用了spring框架中的模块,在上面做改造较难

    状态机-相关概念

    • transition: 转换,表示两种状态间的一种关系。
    • source:节点的当前状态
    • target:节点的目标状态
    • event:事件,触发节点从当前状态到目标状态的动作
    • guard:起校验功能,一般用于校验是否可以执行后续action
    • action:用于实现当前节点对应的业务逻辑处理

    主要使用流程:

            定义状态枚举。
            定义事件枚举。
            定义状态机配置,设置初始状态,以及状态与事件之间的关系。
            定义状态监听器,当状态变更时,触发方法。

  • 相关阅读:
    自旋锁和互斥锁区别
    NFS挂载Android文件系统
    查找文件命令
    make menuconfig出错解决方法
    专访Linux嵌入式开发韦东山操作系统图书作者--转
    Ubuntu进不入系统,一直停留在ubuntu图标画面(转)
    查看驱动打印信息
    aiku给你们最真心地学习建议--转
    SZ,RZ传送文件
    在Android下运行Linux平台编译的程序
  • 原文地址:https://www.cnblogs.com/q1359720840/p/15849280.html
Copyright © 2020-2023  润新知