|
所以,在代码实现时,就出现了一个[状态(枚举)][电梯(类)],其中[电梯]包含了四种状态的处理逻辑,以及提供了一个
[去某一层]的方法。状态之间的转换直接写在状态的处理逻辑中(例如开门状态的处理,就是转换到关门状态)。
如果我在电梯的gotoFloor函数中,使用
if (当前为关门状态) { 关门状态的处理;下一个状态; } else if (当前为开门状态) {开门状态的处理;下一个状态;} else if (当前为运行状态) {运行状态的处理;下一个状态;} ...
这样的方式来进行状态的处理与转换,这也是状态机的一种实现方式。
我的理解就是:状态机就是控制物体状态转换的逻辑,也就是上面这一堆if () {} else if () {} ...。
为什么书本上对状态机描述得很复杂呢?因为状态机本身就是一套状态转换逻辑,只不过它是为了处理更复杂的物体的状态转换而编写的。
所以状态机的运用,在于怎样合理、高效的实现状态的转换,把原本需要使用大量 if .. else if ..来处理的转换逻辑描述的更清晰。
总结:
1.状态机,就是一套用于控制物体状态转换的逻辑。实现状态机控制的首要条件就是清楚的划分物体的状态。
2.状态机有各种各样的实现方式,实现时需要考虑到子新增状态。
这样简单的逻辑,我们可以不假思索得很快的在一份代码中完成。只要使用switch语法,对对象当前的状态做判断,然后在给各个分支中
写上各自的逻辑。但是,如果你需要增加一个中间状态,或者修改某一个分支的逻辑时,你将不得不修改这个类的代码,增加case分支,
修改逻辑。这违反了软件设计中的“开放封闭原则”。为此,我们将状态模式的概念付诸实施,将与指定状态有关的逻辑操作分别写在对应
的可代表状态的类里。
使用于焊接电源的状态机设计模式:
对于焊接电源来说,有开机状态、电源硬件自检状态、待机状态、焊接状态、报警状态。