1. 简单介绍状态机
状态机由状态寄存器和组合逻辑电路构成,能够根据控制信号按照预先设定的状态进行状态转移,是协调相关信号动作、完成特定操作的控制中心。以上是百度百科对状态机的解释。
在百科的解释中,我们可以提炼出状态机的几个要素:存储状态,逻辑电路,预先设定的状态转移路径,外部来的信号,内置的特定操作等。由这些关键要素我们可以推断出以下几点:
-
状态数据有预先设定的多种值
-
逻辑电路是完成内置特定操作的基础“代码“(基础设施),由工程司开发
-
状态能在多种值之间转移
-
每次转移都由外部信号触发
-
状态转移触发后,会有相应的内置操作
由以上这些特性共同构成了一个独立的控制中心,而且这个控制中心与外部各种信号是低耦合的,所有外部信号都要接入一个共同的控制中心,最终也由控制中心完成信号的后续流程。
在java开发中,状态机FSM(有限状态机)是一种常见的设计模式,常常用于一些复杂的业务场景,解决繁琐杂乱的if…else…代码段。
“Allow an object to alter its behavior when its internal state changes.The object will appear to change its class.“
-对象内部状态不同会有不同的行为。似乎好像是不同的类一样。
以电梯为例,电梯有4种状态:开门、关门、运行、停止。电梯的动作:开门、关门、运行(上升或下降)、停止(悬停不动)。
Col1 | 开门行为 | 关门行为 | 运行行为 | 停止行为 |
---|---|---|---|---|
开门 态 | ❌ | ✔️ | ❌ | ❌ |
关门 态 | ✔️ | ❌ | ✔️ | ✔️ |
运行 态 | ❌ | ❌ | ❌ | ✔️ |
停止 态 | ✔️ | ❌ | ✔️ | ❌ |
-
开门状态下,电梯只有关门行为
-
关门状态下,除了关门行为其他行为都有
-
运行状态下,只有停止行为
-
停止状态下,有开门行为和运行行为
状态图如下:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LMVb6IEd-1603446481387)(/u