状态机设计模式
对状态的统一管理
适合在业务需要多种状态下流转的设计模式
状态机的四个要素
现态:当前的状态
事件:触发事件时,状态会发生迁移
动作:发生事件时执行的动作
次态:迁移向的状态
状态机的实现
将业务数据的快照状态记录在数据库中
每一种状态流转时会被记录
将状态机目前的状态记录在数据库中
只会保存最终的状态
定义一个状态接口
描述状态的属性:状态码,状态描述,状态编号
在业务中使用状态机时创建对应的状态机枚举类继承状态接口即可
定义一个事件接口
定义事件的属性:初始状态,目标状态,事件描述,事件代码
在业务中使用状态机进行状态流转时使用对应事件即可
定义一个状态机快照抽象类
定义快照的一些基本属性:快照id,快照状态
在业务中使用快照时继承对应抽象类即可
定义一个事件变更的动作接口
重写接口中的handler方法(),传入快照id,事件,快照实体
规定容器名字定义为(状态机名称_事件)的形式
定义状态机,继承状态机抽象类
状态机具备三个属性
状态机名称
状态机初始状态
状态机执行后处理方法(不重要)
状态机的工作流程
启动状态机时
状态机回到初始状态,保存业务快照,执行后处理方法
statemachine.start(快照id,快照实体)
改变状态机状态时
获取对应的状态处理bean(状态机名字_事件),执行状态变更,更新状态机状态,保存快照,执行后处理方法
statemachine.changeStatus(快照id,对应事件,快照实体)