欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

C语言设计模式之命令模式介绍

程序员文章站 2022-05-21 23:20:13
...

目录
介绍:
传统方式:
命令模式:
总结

介绍:
​ 命令模式是一种行为模式,它可以使代码解耦,便于维护;

假设我们现在要设计一个命令解析的模块:

传统方式:
`void func1(void)
{
printf(“func1\r\n”);
}

void func2(void)
{
printf(“func2\r\n”);
}

void func3(void)
{
printf(“func3\r\n”);
}

void prase_cmd(char cmd)
{
switch(cmd)
{
case 0x01:
func1();
break;
case 0x02:
func2();
break;
case 0x03:
func3();
break;
default:
printf(“cmd in invalid\r\n”);
break;
}
}`
传统方式是使用switch-case对命令进行一一解析的,这样的方式随着命令的增加,prase_cmd中的代码量会变得越来越多,也会越来越臃肿;

而使用命令模式就可以很好的避免传统模式带来的问题:

命令模式:
`void func1(void)
{
printf(“func1\r\n”);
}

void func2(void)
{
printf(“func2\r\n”);
}

void func3(void)
{
printf(“func3\r\n”);
}

typedef void (*cmd_func) (void);

typedef struct
{
int cmd;
cmd_func func;
}cmd_t;

static cmd_t cmd_table[] =
{
{0x01, func1},
{0x02, func2},
{0x03, func3},
};

void prase_cmd(int cmd)
{
for(int index = 0; index < sizeof(cmd_table) / sizeof(cmd_t); index++)
{
if(cmd_table[index].cmd == cmd)
{
cmd_table[index].func();
return;
}
}
}`
通过命令模式,我们可以很好的进行代码的维护与拓展,我们只需要对cmd_table进行维护即可,无需再关注prase_cmd里的内容,实现了代码的解耦;