模式介绍
状态(state)模式是C语言实现相当常用的模式,也是能够在C语言***现出来的最显性的模式之一。在面向对象里,状态模式允许一个对象在内部状态改变的时候改变其行为。
状态用法很多,最常见的是状态机,分为无限状态机和有限状态机。
有限状态机 finite-state machine, FSM, 输入集合和输出集合都是有限的,并只有有限数目的状态。 一般说到状态机即是对有限状态机的简称。
无限状态机 infinite-state machine,ISM ,输入和输出集合无线,状态数目无限的状态机。
在C语言里,状态模式有且仅有一种经典用法,就是有限状态机(FSM)的实现。实现的方式极为突出明显,大部分情况都能直接照搬框架。
状态机最常见的使用场景是实现协议。通常协议会有几个核心状态机描述。
有限状态机
状态机示例1
有一个灯,按下开按钮,就会开灯,按下关按钮就会关灯。这就是一个很典型的简单的有限状态机。简单的描述有2个状态,关灯[STATE_OFF],亮[STATE_LIGHT_ON] 。有两个事件,开和关按钮。这两个事件促使状态机间的转换。

状态机示例2
有一个灯,按下开按钮,就会开灯,按下关按钮就会关灯。和一般等不同的是,两次开之间的灯的明暗不一样。也就是说,第一次开的时候,是高亮,关灯后,再开是低亮,下次再开是高亮,循环往复。
这就是一个很典型的简单的有限状态机。简单的描述有3个状态,关灯[STATE_OFF],高亮[STATE_HIGH_LIGHT],低亮[STATE_LOW_LIGHT]。

简单状态机模式实现
以状态机示例1为目标,如果用if/switch/case来,就没有什么设计和模式的意义,那只是最普通的流程开发技能。以下是简单状态机模式实现,适用于转移条件单一,对结果很确定的状态机。
list.h
https://blog.csdn.net/jenie/article/details/106484602 c语言设计模式代码完整实现-基础(链表实现)
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <assert.h>
/*
简单状态机模式实现
有一个灯,按下开按钮,就会开灯,按下关按钮就会关灯。
这就是一个很典型的简单的有限状态机。简单的描述有2个状态,关灯[STATE_OFF],亮[STATE_LIGHT_ON]

本文详细介绍C语言中状态模式的实现,包括简单状态机和复杂状态机的使用场景及实现方式,如有限状态机(FSM)和无限状态机(ISM),并提供具体示例代码。
最低0.47元/天 解锁文章
1373

被折叠的 条评论
为什么被折叠?



