现在需要对后台日志功能进行升级,该如何实现? 一般人的想法是这样:再写一个函数log2,然后business中log改为log2,这样不就可以了? 但是你想想,主业务代码怎能轻易改动?因为一个小小的功能而要改变主要的业务代码,这样不是显得智商很捉急? 换一种思路,使用回调: #include <stdio.h>
#include <unistd.h>
void log1()
{
printf("1 Logging...\n");
}
void log2()
{
printf("2 Logging...\n");
}
void business( void (*f)() )
{
while(1)
{
sleep(1);
printf("Deal Business...\n");
f();
}
}
int main()
{
business(log1);
return 0;
}
business函数接受一个函数指针,该指针指向的函数没有参数,返回值为void,符合log函数的原型。business中只要f()即可调用相应的函数。
当需要使用log1时,向business传log1、要使用升级后的log2时,传入log2即可。
这样做就business函数并不需要所传入数据的变化,只关心自身的功能就行,具体传入什么数据待用户调用的时候让用户决定,这样就提高了函数的通用性和灵活性。
|