C语言与设计模式 之 二

cdplayer.h

#ifndef _CDPLAYER_H_
#define _CDPLAYER_H_
#ifdef __cplusplus
extern "C" {
#endif
typedef enum {
    EV_STOP,
    EV_PLAY_PAUSE
}EventCode;
typedef enum {
    ST_IDLE,
    ST_PLAY,
    ST_PAUSE
}State;
void initialize();
void OnEvent(EventCode ec);
static void startPlayer();
static void pausePlayer();
static void resumePlayer();
static void stopPlayer();
#ifdef __cplusplus
}
#endif
#endif
 
cdplayer.c
#include <stdio.h>
#include "cdplayer.h"
State state;
void initialize() {
    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;
    }
}
static void startPlayer(){
    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"); 
}
static void resumePlayer(){
    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");   
}
 
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;
}
 
相比一,代码意图更清晰了。
posted @ 2019-12-09 10:16    阅读(138)  评论(0)    收藏  举报