层次状态机编程三:状态机设计模式

1、钩子模式:
比如报警器的布防、撤防、报警、在家布防状态,在处理撤防消息的时候,都是跳转到撤防状态,那把这个统一的行为,放到上一级状态实现。

当然,因为在报警状态下,需要停止声光报警,所以报警状态可以重载一下这个消息的处理。

2、提示器模式:
比如wifi模块的数据查询和数据解析,都需要用到轮询机制。
那么可以添加一个消息DataReady,这样把数据查询和数据解析解耦了。
层次状态机编程三:状态机设计模式_第1张图片
注意,为了提高性能,在发送DataReady之前可以针对数据完整性做基本判断,再发送,比如fifo满。这个模式针对wifi和gsm串口的数据轮询非常有用。

另外,布防延时和报警延时,也可以用这个模式,分解RTC步骤。

3、延迟事件模式
qpn不支持,暂不分析。

4、正交模式:
在一个活动对象的成员变量里面包含另外一个层次状态机的实例,实现两个互不相关的状态机同时运行。并且可以在不同的容器里面重用组件(层次状态机)。

层次状态机编程三:状态机设计模式_第2张图片
层次状态机编程三:状态机设计模式_第3张图片

层次状态机编程三:状态机设计模式_第4张图片

层次状态机编程三:状态机设计模式_第5张图片

通过上述几张图就可以明白正交构件的意义,系统可以同时处在两个状态里面,而且构件和容器可以通过相关api进行消息分发。

5、转换到历史状态:
暂时不使用。

你可能感兴趣的:(QP状态机)