一.基本介绍
概念介绍
1.COLA框架的状态机组件是一种轻量级的、无状态的、基于注解的状态机实现,可以方便地状态流转业务对象的状态转换。
2.COLA框架的状态机使用了连贯接口(Fluent Interfaces)来定义状态和事件,以及对应的动作和检查,并却保了先后顺序,保证了代码的可读性。
状态机DSL(Domain Specific Languages)带来的表达能力,相比较于if-else的代码要更优雅更容易理解。
www.cnblogs.com/hzbook/arch…
核心属性
State:状态
Event:事件,状态由事件触发,引起变化
Transition:流转,表示从一个状态到另一个状态
External Transition:外部流转,两个不同状态之间的流转
Internal Transition:内部流转,同一个状态之间的流转
Condition:条件,表示是否允许到达某个状态
Action:动作,到达某个状态之后,可以做什么
二.使用介绍
1.依赖引入
<dependency>
<groupId>com.alibaba.cola</groupId>`
<artifactId>cola-component-statemachine</artifactId>`
<version>4.3.1</version>
</dependency>
2.Fluent Interfaces接口
StateMachineBuilder<States, Events, Context> builder = StateMachineBuilderFactory.create();
//external transition
builder.externalTransition()
.from(States.STATE1)
.to(States.STATE2)
.on(Events.EVENT1)
.when(checkCondition())
.perform(doAction());
//internal transition`
builder.internalTransition()`
.within(States.STATE2)
.on(Events.INTERNAL_EVENT)
.when(checkCondition())
.perform(doAction());
//external transitions
builder.externalTransitions()
.fromAmong(States.STATE1, States.STATE2, States.STATE3)`
.to(States.STATE4)
.on(Events.EVENT4)
.when(checkCondition())
.perform(doAction());
` builder.build(machineId);
StateMachine<States, Events, Context> stateMachine = StateMachineFactory.get(machineId);`
stateMachine.showStateMachine();
3.触发状态机执行
OrderState target = stateMachine.fireEvent(States.STATE1, Events.EVENT4, ``new Order());
核心方法介绍
StateMachineBuilder
三.简单场景模拟
五.优缺点总结
优点总结如下:
1.代码简单,易于学习,便于根据我们的业务线基础上做二次开发。
2.无状态,减少内存消耗,线程先天安全。
3.先天支持事务
4.先天会自己抛出异常,不会像spring stateMachine出现将异常吃掉情况(当然通过反射确实可以将异常抛出)。
5.包小,摒弃了spring stateMachine中没有必要的功能,功能相对单一,包自然就小了。同时减少了资源的浪费。
六.源码解析,实现原理
https://www.processon.com/view/link/64784de92d286d12cd074c31