设为首页 加入收藏

TOP

适配器模式C语言实现(一)
2013-07-22 17:55:55 来源: 作者: 【 】 浏览:241
Tags:适配器 模式 语言 实现

  【代码清单】

  typedef.h

  [html]

  #ifndef __TYPEDEF_H__

  #define __TYPEDEF_H__

  #include <stdio.h>

  #include <stdlib.h>

  #ifdef __cplusplus

  extern "C" {

  #endif

  typedef enum _Ret

  {

  RET_OK,

  RET_FAIL

  }Ret;

  #define return_if_fail(p)\

  if(!(p)){\

  printf("%s:%d Warning:"#p"Failed\n",__func__,__LINE__);\

  return;}

  #define return_val_if_fail(p, ret)\

  if(!(p)){\

  printf("%s:%d Warning:"#p"Failed\n",__func__,__LINE__);\

  return (ret);}

  #define SAFE_FREE(p) if(p != NULL){free(p); p = NULL;}

  #ifdef __cplusplus

  }

  #endif

  #endif

  #ifndef __TYPEDEF_H__

  #define __TYPEDEF_H__

  #include <stdio.h>

  #include <stdlib.h>

  #ifdef __cplusplus

  extern "C" {

  #endif

  typedef enum _Ret

  {

  RET_OK,

  RET_FAIL

  }Ret;

  #define return_if_fail(p)\

  if(!(p)){\

  printf("%s:%d Warning:"#p"Failed\n",__func__,__LINE__);\

  return;}

  #define return_val_if_fail(p, ret)\

  if(!(p)){\

  printf("%s:%d Warning:"#p"Failed\n",__func__,__LINE__);\

  return (ret);}

  #define SAFE_FREE(p) if(p != NULL){free(p); p = NULL;}

  #ifdef __cplusplus

  }

  #endif

  #endif

  player.h

  [html]

  #ifndef __PLAYER_H__

  #define __PLAYER_H__

  #include "typedef.h"

  #ifdef __cplusplus

  extern "C" {

  #endif

  struct _Player;

  typedef struct _Player Player;

  struct _Player

  {

  char *name;

  void (*attack)(void *player);

  void (*defend)(void *player);

  void (*destroy)(void *player);

  };

  static inline void player_attack(Player *thiz)

  {

  return_if_fail(thiz != NULL);

  if(thiz->attack != NULL)

  {

  thiz->attack(thiz);

  }

  }

  static inline void player_defend(Player *thiz)

  {

  return_if_fail(thiz != NULL);

  if(thiz->defend != NULL)

  {

  thiz->defend(thiz);

  }

  }

  static inline void player_destroy(Player *thiz)

  {

  return_if_fail(thiz != NULL);

  if(thiz->destroy != NULL)

  {

  thiz->destroy(thiz);

  }

  }

  #ifdef __cplusplus

  }

  #endif

  #endif

  #ifndef __PLAYER_H__

  #define __PLAYER_H__

  #include "typedef.h"

  #ifdef __cplusplus

  extern "C" {

  #endif

  struct _Player;

  typedef struct _Player Player;

  struct _Player

  {

  char *name;

  void (*attack)(void *player);

  void (*defend)(void *player);

  void (*destroy)(void *player);

  };

  static inline void player_attack(Player *thiz)

  {

  return_if_fail(thiz != NULL);

  if(thiz->attack != NULL)

  {

  thiz->attack(thiz);

  }

  }

  static inline void player_defend(Player *thiz)

  {

  return_if_fail(thiz != NULL);

  if(thiz->defend != NULL)

  {

  thiz->defend(thiz);

  }

  }

  static inline void player_destroy(Player *thiz)

  {

  return_if_fail(thiz != NULL);

  if(thiz->destroy != NULL)

  {

  thiz->destroy(thiz);

  }

  }

  #ifdef __cplusplus

  }

  #endif

  #endif

  forwardsplayer.h

  [html]

  #ifndef __FORWARDSPLAYER_H__

  #define __FORWARDSPLAYER_H__

  #include "player.h"

  #ifdef __cplusplus

  extern "C" {

  #endif

  struct _Forwards;

  typedef struct _Forwards Forwards;

  struct _Forwards

  {

  Player player;

  };

  Forwards *ForwardsCreate(char *name);

  #ifdef __cplusplus

  }

  #endif

  #endif

  #ifndef __FORWARDSPLAYER_H__

  #define __FORWARDSPLAYER_H__

  #include "player.h"

  #ifdef __cplusplus

  extern "C" {

  #endif

  struct _Forwards;

  typedef struct _Forwards Forwards;

  struct _Forwards

  {

  Player player;

  };

  Forwards *ForwardsCreate(char *name);

  #ifdef __cplusplus

  }

  #endif

  #endif

  forwardsplayer.c

  [html]

  #include <stdio.h>

  #include <stdlib.h>

  #include "forwardsplayer.h"

  static void forwards_attack(void *thiz)

  {

  printf("前锋 %s 进攻\n", ((Forwards *)thiz)->player.name);

  }

  static void forwards_defend(void *thiz)

  {

  printf("前锋 %s 防守\n", ((Forwards *)thiz)->player.name);

  }

  static void forwards_destroy(void *thiz)

  {

  return_if_fail(thiz !=  NULL);

  SAFE_FREE(thiz);

  }

  Forwards *ForwardsCreate(char *name)

  {

  Forwards *thiz = malloc(sizeof(Forwards));

  if(thiz != NULL)

  {

  thiz->player.name = name;

  thiz->player.attack = forwards_attack;

  thiz->player.defend = forwards_defend;

  thiz->player.destroy = forwards_destroy;

  }

  //printf("%s\n", thiz->player->name);

  return thiz;

  }

  #include <stdio.h>

  #include <stdlib.h>

  #include "forwardsplayer.h"

  static void forwards_attack(void *thiz)

  {

  printf("前锋 %s 进攻\n", ((Forwards *)thiz)->player.name);

  }

  static void forwards_defend(void *thiz)

  {

  printf("前锋 %s 防守\n", ((Forwards *)thiz)->player.name);

  }

  static void forwards_destroy(void *thiz)

  {

  return_if_fail(thiz !=  NULL);

  SAFE_FREE(thiz);

  }

  Forwards *ForwardsCreate(char *name)

  {

  Forwards *thiz = malloc(sizeof(Forwards));

  if(thiz != NULL)

  {

  thiz->player.name = name;

  thiz->player.attack = forwards_attack;

  thiz->player.defend = forwards_defend;

  thiz->player.destroy = forwards_destroy;

  }

  //printf("%s\n", thiz->player->name);

  return thiz;

  }

  centerplayer.h

  [html]

  #ifndef __CENTERPLAYER_H__

  #define __CENTERPLAYER_H__

  #include "player.h"

  #ifdef __cplusplus

  extern "C" {

  #endif

  struct _Center;

  typedef struct _Center Center;

  struct _Center

  {

  Player player;

  };

  Center *CenterCreate(char *name);

  #ifdef __cplusplus

  }

  #endif

  #endif

  #ifndef __CENTERPLAYER_H__

  #define __CENTERPLAYER_H__

  #include "player.h"

  #ifdef __cplusplus

  extern "C" {

  #endif

  struct _Center;

  typedef struct _Center Center;

  struct _Center

  {

  Player player;

  };

  Center *CenterCreate(char *name);

  #ifdef __cplusplus

  }

  #endif

  #endif

  centerplayer.c

  [html]

  #include <stdio.h>

  #include <stdlib.h>

  #include "centerplayer.h"

  static void center_attack(void *thiz)

  {

  printf("中锋 %s 进攻\n", ((Center *)thiz)->player.name);

  }

  static void center_defend(void *thiz)

  {

  printf("中锋 %s 防守\n", ((Center *)thiz)->player.name);

  }

  static void center_destroy(void *thiz)

  {

  return_if_fail(thiz !=  NULL);

  SAFE_FREE(thiz);

  }

  Center *CenterCreate(char *name)

  {

  Center *thiz = malloc(sizeof(Center));

  if(thiz != NULL)

  {

  thiz->player.name = name;

  thiz->player.attack = center_attack;

  thiz->player.defend = center_defend;

  thiz->player.destroy = center_destroy;

  }

  return thiz;

  }

  #include <stdio.h>

  #include <stdlib.h>

  #include "centerplayer.h"

  static void center_attack(void *thiz)

  {

  printf("中锋 %s 进攻\n", ((Center *)thiz)->player.name);

  }

  static void center_defend(void *thiz)

  {

  printf("中锋 %s 防守\n", ((Center *)thiz)->player.name);

  }

  static void center_destroy(void *thiz)

  {

  return_if_fail(thiz !=  NULL);

  SAFE_FREE(thiz);

  }

  Center *CenterCreate(char *name)

  {

  Center *thiz = malloc(sizeof(Center));

  if(thiz != NULL)

  {

  thiz->player.name = name;

  thiz->player.attack = center_attack;

  thiz->player.defend = center_defend;

  thiz->player.destroy = center_destroy;

  }

  return thiz;

  }

     

首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇设置缓存失效的三种方式 下一篇编码风格 - 缩进和空白

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: