状态机
状态机设计
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:用于实现当前节点对应的业务逻辑处理
主要使用流程:
定义状态枚举。
定义事件枚举。
定义状态机配置,设置初始状态,以及状态与事件之间的关系。
定义状态监听器,当状态变更时,触发方法。
---------------------------------------------------------------------------
国之殇,未敢忘!
南京大屠杀!
731部队!
以及核污染水排海等一系列全无人性的操作,购买他们的食品和为它们提供帮助只会更加变本加厉的害你,呼吁大家不要购买日本相关产品
昭昭前事,惕惕后人
吾辈当自强,方使国不受他人之侮!
---------------------------------------------------------------------------
作者:三号小玩家
出处:https://www.cnblogs.com/q1359720840/
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。 版权信息