状态机

简介: 首先需要考虑涉及到哪些状态节点和哪些事件,如何方便状态节点的获取、状态节点如何串联起来呢?串联的方式下,如何拿到下一个状态节点?如果基于角色,如何实现?我们知道工作流可以实现基于角色进行流程的流转,但是此时我们涉及到事件和状态,会出现多个分支,如果使用工作流实现,流程处理上,比如activiti上,可能比较复杂,因此考虑比较轻量级的状态机来实现的话,相对来说要方便一些。

     下面的内容基于https://github.com/alibaba/COLACOLA 是 Clean Object-Oriented and Layered Architecture的缩写,代表“整洁面向对象分层架构”。 目前COLA已经发展到COLA v4

一、如何实现一个状态机?

     首先需要考虑涉及到哪些状态节点和哪些事件,如何方便状态节点的获取、状态节点如何串联起来呢?串联的方式下,如何拿到下一个状态节点?如果基于角色,如何实现?

我们知道工作流可以实现基于角色进行流程的流转,但是此时我们涉及到事件和状态,会出现多个分支,如果使用工作流实现,流程处理上,比如activiti上,可能比较复杂,因此考虑比较轻量级的状态机来实现的话,相对来说要方便一些。

1)相关状态初始化,比如:STATE1, STATE2, STATE3, STATE4

2)相关事件:比如:EVENT1, EVENT2, EVENT3, EVENT4, INTERNAL_EVENT

3)状态节点上下文:context,主要包括状态节点类型、状态节点

构建状态节点分支相关接口信息:

From  从哪个状态节点开始

To  需要到的目标状态节点

When 定义过渡期间要执行的操作 perform

Condition  满足条件时,可以从from到to状态节点

因此可以想到我们需要构建状态机的构建器必然需要:

StateMachineBuilder 状态机构建器

数据结构:状态、事件

方便构建对应的transition

其中transition中包括的方法:

构建方法:build

指定初始状态  initialState

内部过渡: internalTransition

外部过渡:externalTransition

外部过渡列表:external Transitions

没有匹配策略:noMatchStrategy

StateMachineFactory 状态机工厂涉及的方法:

构建状态机

注册状态机

展示状态机

展示状态机uml

节点操作:

基于node的数据结构进行构建,配合使用from、to、condtion、link

with设置对应的布局

使用状态的步骤:

创建stateMachineBuilder对象

基于条件进行状态节点指向构建 initiaState、from、to、on、when、perform

基于状态机id进行构建 stateMachine

执行fireEvent操作,fire的过程中拿到下一个状态节点setNextState(source,request)

二、状态机信息流程

可以参考COLA里面的test,可以看到COLA的具体代码实现。

image-20221127123011098.png

三、展示状态机信息效果

image-20221127123206377.png

总体来说cola的状态机还是蛮实用的。

基于cola的状态机还可以实现复杂的状态-事件流转。如下图所示:

image-20221127124642866.png

四、状态机的使用场景

审批流程、订单状态流转等。


目录
相关文章
|
6月前
|
C++
4 状态机
4 状态机
30 0
|
8月前
|
传感器 数据可视化 JavaScript
状态机(State Machines):理解、设计和应用有限状态机
状态机(State Machines)是一种强大的计算模型和设计工具,用于建模和控制有限状态的系统和行为。无论是在软件开发、自动化控制、游戏设计还是其他领域,状态机都发挥着关键作用。本博客将深入探讨状态机的概念、工作原理以及如何在不同应用中设计和应用它们。
1251 0
|
11月前
|
算法 Linux Android开发
c++状态机的使用
c++状态机的使用
|
算法 网络协议 Java
状态机是干什么的?底层原理是什么?
状态机是干什么的?底层原理是什么?
480 0
|
存储 算法 异构计算
状态机的概念与设计
⭐本专栏针对FPGA进行入门学习,从数电中常见的逻辑代数讲起,结合Verilog HDL语言学习与仿真,主要对组合逻辑电路与时序逻辑电路进行分析与设计,对状态机FSM进行剖析与建模。
237 0
状态机的概念与设计
|
传感器 算法 安全
状态机设计举例
⭐本专栏针对FPGA进行入门学习,从数电中常见的逻辑代数讲起,结合Verilog HDL语言学习与仿真,主要对组合逻辑电路与时序逻辑电路进行分析与设计,对状态机FSM进行剖析与建模。
132 0
状态机设计举例
|
JavaScript 前端开发 API
Zag-基于状态机的组件库
本文适合对状态机感兴趣的小伙伴阅读
Zag-基于状态机的组件库
有限状态机
有限状态机简介 有限状态机(FSM)是许多数字系统中用来控制系统和数据流路径行为的时序电路。FSM的实例包括控制单元和时序。 本实验介绍了两种类型的FSM(Mealy和Moore)的概念,以及开发此类状态机的建模方式。 请参阅Vivado教程,了解如何使用Vivado工具创建项目和验证数字电路。 Mealy FSM(米利型有限状态机) 有限状态机(FSM)或称简单状态机用于设计计算机程序和时序逻辑电路。它被设想为抽象机器,可以处于有限数量的用户定义状态之一。机器一次只能处于一种状态; 它在任何给定时间所处的状态称为当前状态。 当由触发事件或条件启动时,它可以从一种状态改变为另一种状态;
157 0
|
异构计算
用有限状态机去理解这个逻辑过程
用有限状态机去理解这个逻辑过程
68 0
用有限状态机去理解这个逻辑过程
|
存储 设计模式 算法
有限状态机FSM
关于状态机,以前写过[用Go实现一个状态机](https://mp.weixin.qq.com/s?__biz=MzUzNzAzMTc3MA==&mid=2247484850&idx=1&sn=5ba31ff066ddeeedab27f9ca9f1b9b58&scene=21#wechat_redirect),只是讲述了如何控制状态的流转,理论上不能算作完整的状态机。