c语言设计模式代码完整实现-状态机模式

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

模式介绍

状态(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]
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值