设计模式(十)-状态模式、Qt状态机

书中关于状态模式引入的例子是:小菜一天的工作状态

版本一:很简单一个时间变量,一个判断事件的函数。(最简单粗暴的,如果你的代码不超过500行,还是可以使用这种方式的)

版本二:写了一个类,包含时间的成员变量。然后一个判断时间的成员函数(好吧,简单粗暴的外形被影藏起来了)

版本三:各个子状态类,都继承一个状态抽象类,有一个公共状态改变接口(根据业务状态逻辑,设置上下文的当前状态)。这个接口,在子类实体中实现。所以这里还必须有一个上下文类,包含一个状态成员变量。当前状态的获取,设置。对请求做处理的接口函数,而这个函数就是调用状态父类的公共接口,(公用了一个函数名称而已,大哭),其具体实现是在状态子类中进行的。

设计模式(十)-状态模式、Qt状态机

把原来大二全的一个函数判断,分解到个子类中。原始的8到20点的各个状态的判断,分解为上午、下午、晚上三个阶段,然后在阶段中,判断状态。这里各个子状态的切换逻辑,都已经预设在子状态中了。

本质,将conetext中的state,一次传递该表。

实际工作中的状态机编程,可能并不这么直接简单。

Qt的状态机,可以比较方便使用。Qt状态机学习