微信公众号:[double12gzh]
关注容器技术、关注
Kubernetes
。问题或建议,请公众号留言。
1. 背景
在计算机领域中,状态机
是一个比较基础的概念。在我们的日常生活中,我们可以看到许多状态机
的例子,如:交通信息号灯、电梯、自动售货机等。
基于FSM的编程也是一个强大的工具,可以对复杂的状态转换进行建模,它可以大大简化我们的程序。
2. 什么是状态机
有限状态机(FSM)或简称状态机,是一种计算的数学模型。它是一个抽象的机器,在任何时间都可以处于有限的状态之一。FSM可以根据一些输入从一个状 态变为另一个状态;从一个状态到另一个状态的变化称为转换。
一个FSM由三个关键要素组成:初始状态
、所有可能状态的列表
、触发状态转换的输入
。
下面我们以旋转门作为FSM建模的一个简单例子(来自Wikipedia)
和其他FSM一样,转门的状态机有三个元素:
•它的初始状态是 "锁定"•它有两种可能的状态。"锁定 "和 "解锁"•两个输入将触发状态变化。"推 "和 "硬币"
3. 实现状态机
接下来,我将建立一个模拟旋转门行为的命令行程序。当程序启动时,它会提示用户输入一些命令,然后它将根据输入的命令改变其状态。
3.1 版本1 简单直接
package mainimport ( "bufio" "fmt" "log" "os" "strings")// 旋转门状态type State uint32const ( Locked State = iota Unlocked)// 相关的命令const ( CmdCoin = "coin" CmdPush = "push")func main() {
state := Locked reader := bufio.NewRe