最近,前端异常的火爆,我以为有如下缘由,第一,因为微信开发很是的火,第二,用H5开发一套代码能够运行到ios/andriod两个平台,节省开发成本。第三,开发效率高,我以为这主要是由于js这门语言的超强的灵活性。javascript
在实际的开发中咱们常常须要对逻辑进行分层,好比,工具层-业务层,工具层:是高內聚低耦合的实现单一功能的一个一些类库。业务层:负责调用工具层的一些方法处理具体的业务逻辑。下面咱们经过一个例子,在C中如何实现?前端
工具层:负责不一样的数值计算,返回计算结果java
#pragma 负责具体的计算 int plus(int a, int b){ return a + b; } int minus(int a, int b){ return a - b; } int multiplication(int a, int b){ return a * b; }
业务层:负责处理具体的业务逻辑,这么作的好处是,业务层不用关系,具体的计算是如何实现的,仅仅只是调用就好。ios
你能够这样写:方式一git
int main(int argc, const char * argv[]) { // 计算加 int (*p1)(int,int) = plus; NSLog(@" plus = %d",calculate(p1, 5, 3)); // 减 int (*p2)(int,int) = minus; NSLog(@" minus = %d",calculate(p2, 5, 3)); // 乘 int (*p3)(int,int) = multiplication; NSLog(@" mulplication = %d",calculate(p3, 5, 3)); return 0; }
固然你还能够这样写:方式二github
int main(int argc, const char * argv[]) { // 计算加 NSLog(@" plus = %d",calculate1(PLUS, 5, 3).res); // 计算减 NSLog(@" minus = %d",calculate1(MINUS, 5, 3).res); // 计算乘 NSLog(@" mulplication = %d",calculate1(MULPLICATION, 5, 3).res); return 0; }
你看到这里可能就要问了,你这mian里边的calculate,calculate都是什么玩意儿。不要着急。在C中,你想要实现函数的分层,你就要写一些,回调函数了。设计模式
对应main方式一:微信
int calculate(int (*p)(int,int), int a, int b){ // 回调 return p(a,b); } // 这里传过来函数指针一个回调,而后利用回调调用工具层的方法。
对应main方式二:微信开发
typedef enum : NSUInteger { PLUS = 0, MINUS, MULPLICATION, } Calculate; typedef struct { int (*p)(int,int); int res; }CLASS; // 在这里处理,具体进行哪些运算,业务层只须要告诉我,计算的类型和计算的数字便可 CLASS calculate1(Calculate type,int a,int b){ switch (type) { case PLUS: { CLASS c; c.p = plus; c.res = plus(a,b); return c; } break; case MINUS: { CLASS c; c.p = minus; c.res = minus(a,b); return c; } break; case MULPLICATION: { CLASS c; c.p = multiplication; c.res = multiplication(a, b); return c; } break; } }
完整的代码:在GitHub上面 https://github.com/meidong163/js-C- 其实这里用到了一种设计模式:简单工厂模式,关于更多的设计模式,请参看,https://github.com/huang303513/Design-Pattern-For-iOS ,这哥们用OC写的,写的很好函数
js中,那就太让人兴奋了
<script type="text/javascript"> function calculate(way) { if ( way == '+' ) return function mins(a,b) {// 工具层 + return a - b } else if (way == '-') return function plus(a,b) { return a + b } else if (way == '*') return function mulplication(a,b) { return a * b } return way } // 业务层 alert( calculate('+')(5 ,3) ) alert( calculate('-')(5, 3) ) alert( calculate('*')(5, 3) ) </script>
js中,代码少了不少。
js中,函数能够做为返回值,函数中能够定义函数,c不行,c中最多能够把函数指针看成参数,函数指针不能直接做为返回值,但能够放在结构体中做为返回值。js中还有一个好处就是,回调函数和工具函数写在了一块儿。这样代码很是紧凑。