前言
状态机的概念很可能比任何读者都古老 并且绝对比 Java 语言本身。有限自动机的描述可以追溯到 1943 年 当绅士 Warren McCulloch 和 Walter Pitts 写了一篇关于 它。后来,George H. Mealy 提出了一个状态机概念(称为 1955 年的“Mealy Machine”)。一年后,即 1956 年,爱德华 F. Moore 提交了另一篇论文,其中他描述了所谓的 一台“摩尔机器”。如果 你读过任何关于状态机的东西,比如 Mealy 和 Moore 的名字, 应该在某个时候出现。
此参考文档包含以下部分:
Introduction 包含对本参考文档的介绍。
使用 Spring Statemachine 描述了 Spring Statemachine (SSM) 的用法。
状态机示例包含更详细的状态机示例。
FAQ 包含常见问题。
附录 包含有关所用材料和状态机的一般信息。
介绍
背景
状态机之所以强大,是因为它们的行为始终是 由于操作方式不同,一致性和相对容易调试 规则在机器启动时是一成不变的。这个想法是,您的 应用程序现在处于并且可能存在于有限数量的状态中。然后是一些事情 将应用程序从一个状态带到另一个状态。 状态机由触发器驱动,触发器基于 事件或计时器。
在 应用程序,然后与各种 不同的方式。您可以通过以下方式与状态机交互 发送事件、监听状态机做什么或请求 当前状态。
传统上,状态机会在 开发人员意识到代码库开始看起来像一个板子 满满的意大利面。意大利面条式代码看起来像一个永无止境的分层代码 IF、ELSE 和 BREAK 子句的结构,编译器可能应该 当事情开始看起来太复杂时,让开发人员回家。
使用场景
在以下情况下,项目非常适合使用状态机:
-
您可以将应用程序或其结构的一部分表示为状态。
-
您希望将复杂的 logic 拆分为更小的可管理任务。
-
应用程序已经遇到并发问题(例如) 异步发生的事情。
当您执行以下操作时,您已经在尝试实现状态机:
-
使用布尔标志或枚举对情况进行建模。
-
具有仅对 应用程序生命周期。
-
遍历一个 if-else 结构(或者更糟糕的是,多个这样的结构), 检查特定标志或 enum 的 County 设置,然后进一步例外,确定 flags 和 enum 的组合存在或不存在。