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