C语言与设计模式 之 二
cdplayer.h
#ifndef _CDPLAYER_H_
#define _CDPLAYER_H_
#define _CDPLAYER_H_
#ifdef __cplusplus
extern "C" {
#endif
extern "C" {
#endif
typedef enum {
EV_STOP,
EV_PLAY_PAUSE
}EventCode;
EV_STOP,
EV_PLAY_PAUSE
}EventCode;
typedef enum {
ST_IDLE,
ST_PLAY,
ST_PAUSE
}State;
ST_IDLE,
ST_PLAY,
ST_PAUSE
}State;
void initialize();
void OnEvent(EventCode ec);
void OnEvent(EventCode ec);
static void startPlayer();
static void pausePlayer();
static void resumePlayer();
static void stopPlayer();
static void pausePlayer();
static void resumePlayer();
static void stopPlayer();
#ifdef __cplusplus
}
#endif
}
#endif
#endif
cdplayer.c
#include <stdio.h>
#include "cdplayer.h"
#include "cdplayer.h"
State state;
void initialize() {
state = ST_IDLE;
}
state = ST_IDLE;
}
void OnEvent(EventCode ec){
switch(ec){
case EV_STOP:
if(state == ST_PLAY || state == ST_PAUSE)
stopPlayer();
break;
case EV_PLAY_PAUSE:
if(state == ST_PLAY)
pausePlayer();
else if(state == ST_PAUSE)
resumePlayer();
else
startPlayer();
break;
default:
break;
}
}
switch(ec){
case EV_STOP:
if(state == ST_PLAY || state == ST_PAUSE)
stopPlayer();
break;
case EV_PLAY_PAUSE:
if(state == ST_PLAY)
pausePlayer();
else if(state == ST_PAUSE)
resumePlayer();
else
startPlayer();
break;
default:
break;
}
}
static void startPlayer(){
state = ST_PLAY;
//do something to start player
printf("start\n");
}
state = ST_PLAY;
//do something to start player
printf("start\n");
}
static void pausePlayer(){
state = ST_PAUSE;
//do something to pause player
printf("pause\n");
}
state = ST_PAUSE;
//do something to pause player
printf("pause\n");
}
static void resumePlayer(){
state = ST_PLAY;
//do something to resume player
printf("resume\n");
}
state = ST_PLAY;
//do something to resume player
printf("resume\n");
}
static void stopPlayer(){
state = ST_IDLE;
//do something to stop player
printf("stop\n");
}
state = ST_IDLE;
//do something to stop player
printf("stop\n");
}
cdplayer_test.c
#include "cdplayer.h"
int main(int argc, char const *argv[]){
initialize();
OnEvent(EV_PLAY_PAUSE);
OnEvent(EV_PLAY_PAUSE);
OnEvent(EV_PLAY_PAUSE);
OnEvent(EV_STOP);
return 0;
}
initialize();
OnEvent(EV_PLAY_PAUSE);
OnEvent(EV_PLAY_PAUSE);
OnEvent(EV_PLAY_PAUSE);
OnEvent(EV_STOP);
return 0;
}
相比一,代码意图更清晰了。

浙公网安备 33010602011771号