有限状态自动机的应用在规则引擎,流程引擎上都有体现。最简单的应用场景是订单系统的一整个触发流程。
如下用Go模拟状态流转。
我们规定了三种状态,分别是Open,Middle,Close。
由Open状态可以向Middle状态流转,由于Middle状态可以向Close状态流转。
package main
import "fmt"
type State = int
const (
StateOpen State = iota
StateMiddle
StateClosed
)
func main() {
StateChange(StateOpen)
}
func StateChange(state State) {
for {
switch state {
case StateOpen:
fmt.Println("当前状态:", state)
state = StateMiddle
fmt.Println("转移到middle")
if 1 < 2 {
state = StateClosed
}
case StateMiddle:
fmt.Println("当前状态:", state)
fmt.Println("转移到closed")
state = StateClosed
case StateClosed:
fmt.Println("当前状态:", state)
fmt.Println("结束执行")
return
default:
fmt.Println("error: invalid state")
return
}
}
}