1.把这个东西跟数字电路里面的时序电路类比就很好理解,记住糖果机的例子也OK。
2.主要利用将每一个状态封装成一个类的办法,来使复杂的状态转换逻辑变得简单,而且容易扩展。利用了C++的多态性,状态机只要用当前状态指针调用当前状态的方法即可,不用关心各个状态的具体内部实现。这就造成了当状态机状态改变时,它的行为也改变了。它与一般多态的区别在于,对对象方法的调用会改变对象的当前状态,跟策略模式的主要区别也在于此。
3.这个模式主要适用于状态转换没有通用规律,而是来自于客户需求的情况,如果状态转换间有通用的规律,则不用将每个状态写成一个类,只要用通用的代码实现各个状态间的自动转换即可,比如AC自动机。
4.要选择状态机对修改关闭还是具体状态对修改关闭,根据实际情况而定。
5.OO原则总结:if语句这个玩意儿效率不高,而且是扩展时最容易出错的一种,要尽量避免,如果代码中出现大量的逻辑判断,要开始考虑代码重构了,此时修改或增加任意一个分支都可能带来逻辑上的bug。
6.我把这个模式叫做糖果模式了。。。。。。
还是从网上下了一个类图:
![](https://pic002.cnblogs.com/images/2011/176457/2011080909595620.jpg)