现在需要对后台日志功能进行升级,该如何实现? 一般人的想法是这样:再写一个函数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函数并不需要所传入数据的变化,只关心自身的功能就行,具体传入什么数据待用户调用的时候让用户决定,这样就提高了函数的通用性和灵活性。
|