状态机-面向对象编程

#include "stdio.h"//状态
typedef struct State {const struct State *(* const state_press)(const struct State *pThis);const struct State *(* const state_release)(const struct State *pThis);
} State;//事件--改变状态
void initialize(void);
void press_button(void);
void release_button(void);//调用函数
static const State *pCurrentState=NULL;
static const State *ignore(const State *pThis);
static const State *press(const State *pThis);
static const State *release(const State *pThis);//迁移过程
const State IDLE = {press,ignore
};
const State PRESS = {ignore,release
};
const State RELEASE = {press,ignore
};//事件具体实现--改变状态
void initialize(void)
{pCurrentState = &IDLE;
}
void press_button()
{pCurrentState = pCurrentState->state_press(pCurrentState);
}
void release_button()
{pCurrentState = pCurrentState->state_release(pCurrentState);
}static const State *ignore(const State *pThis)
{printf("nothing to do\r\n");return pCurrentState;
}
static const State *press(const State *pThis)
{printf("按键1按下\r\n");return &PRESS;
}
static const State *release(const State *pThis)
{printf("按键1松开\r\n");return &RELEASE;
}int main(void)
{initialize();press_button();press_button();release_button();release_button();return 0;
}

状态机-面向对象编程相关推荐

  1. 基于STM32F103移植华为LiteOS_任务挂起与恢复_面向对象编程思想之按键状态机

    华为LiteOS_任务挂起与恢复_面向对象编程思想之按键状态机 因为在做华为LiteOS任务挂起和恢复需要使用到按键去触发任务挂起和恢复动作,因为我就萌发出使用状态机这种架构做一个按键检测触发.回想已 ...

  2. 举例说明层次分析的三大原则_LabVIEW面向对象编程_初窥门槛(2)_设计原则(SOLID)...

    该系列一共是9篇文章,本文是该系列的第二篇,是讲述通用的面向对象编程设计原则(SOLID),LabVIEW作为一门具备面向对象编程范式的图形化编程语言当然也要遵循上述的通用设计原则,当然除了接口隔离原 ...

  3. 【面向对象编程】(4) 类的继承,重构父类中的方法

    各位同学好,今天和大家分享一下面向对象编程中,类的三大特征之继承.主要介绍:子类继承父类的基本方法:重写父类的类方法:重构父类的初始化方法:super() 方法.本节主要是单继承,多继承在下一节中介绍 ...

  4. 【面向对象编程】(3) 类之间的交互,依赖关系,关联关系

    各位同学好,今天和大家分享一下面向对象编程中,类之间的交互,类之间的依赖关系和关联关系.有不明白的可见前一章节:https://blog.csdn.net/dgvv4/article/details/ ...

  5. 【面向对象编程】(1) 类实例化的基本方法

    各位同学好,本章节和大家分享一下面向对象编程的一些方法,通过一些案例带大家由浅入深掌握面向对象的编程. 1. 最基本的类实例化 创建类的方法是 class 变量名: ,实例化方法是 类名() ,分配属 ...

  6. C#编程概念系列(一):面向对象编程

    系列文章索引目录:http://www.cnblogs.com/loner/archive/2013/05/09/3068211.html 引子: 面向对象编程:这个在当下已不是什么时髦的概念,但通过 ...

  7. JavaScript面向对象编程

    自从有了Ajax这个概念,JavaScript作为Ajax的利器,其作用一路飙升.JavaScript最基本的使用,以及语法.浏览器对象等等东东在这里就不累赘了.把主要篇幅放在如何实现JavaScri ...

  8. python面向对象的优点_Python面向对象编程——总结面向对象的优点

    Python面向对象编程--总结面向对象的优点 一.从代码级别看面向对象 1.在没有学习类这个概念时,数据与功能是分离的 def exc1(host,port,db,charset): conn=co ...

  9. 转载知乎上的一篇:“ 面向对象编程的弊端是什么?”

    2019独角兽企业重金招聘Python工程师标准>>> 弊端是,没有人还记得面向对象原本要解决的问题是什么. 1.面向对象原本要解决什么(或者说有什么优良特性) 似乎很简单,但实际又 ...

最新文章

  1. 万字长文详解Docker架构原理及功能使用!
  2. 探测器扎堆火星,毅力号:谁挡我WiFi了!
  3. MVC在基控制器中实现处理Session的逻辑
  4. 联想创投子公司国民认证,助力农行全面升级FIDO移动生物识别安全认证
  5. Google今日更新PR值,帆船书会由1升到了3
  6. 理解Promise规范
  7. opencv3.2.0形态学滤波之开运算、闭运算
  8. LightOJ 1266 - Points in Rectangle 二维树状数组
  9. Python技术知识清单(数据科学)
  10. 贪心算法-完全背包问题
  11. matlab检验相关性显著性检验,基于matlab的栅格数据相关分析及显著性检验
  12. 面试题单例模式的五种写法(枚举妙用)
  13. 客户成功服务市场现状研究分析报告 -
  14. 【程序人生】机灵鹤七月份的月度总结
  15. android高仿今日头条小视频转场切换效果
  16. Ioc之Bean基础
  17. python语言是什么语言-python是一门什么样的语言?
  18. python绘制小猪佩奇程序设计大作业_代码绘制一只小猪佩奇---python篇
  19. 阅读软件汇-EPUB专版
  20. (附源码)python学生成绩管理系统 毕业设计 061011

热门文章

  1. oracle导出导入数据库
  2. 注意力机制学习(一)——通道注意力与pytorch案例
  3. mysql 排名_MySQL和Hive中的排名问题
  4. java 取数组的前90位_java 从int数组中获取最大数的方法
  5. zookeeper删除节点的权限_zookeeper权限管理
  6. mysql格式化日期成分_MySQL格式化日期
  7. oracle dg巡检,oracle dg状态检查及相关命令
  8. matlab 高级函数
  9. SQL 创建随机时间的函数
  10. 初学JAVA——方法重载练习