C语言设计模式(命令模式)
#define ARRAY_SIZE(a) (sizeof(a)/sizeof(a[0])) typedef int (*parse_func)(const char *data,size_t len); struct parse_handler{ int type; parse_func func; } static int parse_temperature(const char *data,size_t len) { assert(len == 4); int value = *(int *)data; printf("temperature = %d\n",value); } static int parse_humidity(const char *data,size_t len) { assert(len==4); int value = *(int *)data; printf("humidity = %d\n",value); } static struct parse_handler handlers = { {1,parse_tmepeature}, {2,parse_humidity}, }; static parse_func parse_func_find(int type) { int i; for(i=0;i<ARRAY_SIZE(handlers);i++){ if(handlers[i].type == type) return handlers[i].func; } return NULL; } static int parse(const char *data,size_t len) { int data_len = data[0]; int data_type = data[1]; parse_func func = parse_func_find(data_type); if(func != NULL) func(data+2,data_len-2); }