最近,前端异常的火爆,我觉得有以下原因,第一,由于微信开发非常的火,第二,用H5开发一套代码可以运行到ios/andriod两个平台,节省开发成本。第三,开发效率高,我觉得这主要是因为js这门语言的超强的灵活性。
在实际的开发中我们经常需要对逻辑进行分层,比如,工具层-业务层,工具层:是高內聚低耦合的实现单一功能的一个一些类库。业务层:负责调用工具层的一些方法处理具体的业务逻辑。下面我们通过一个例子,在C中如何实现?
工具层:负责不同的数值计算,返回计算结果
#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;
}
业务层:负责处理具体的业务逻辑,这么做的好处是,业务层不用关系,具体的计算是如何实现的,仅仅只是调用就好。
你可以这样写:方式一
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;
}
当然你还可以这样写:方式二
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中,那就太让人兴奋了
js中,代码少了很多。
js中,函数可以作为返回值,函数中可以定义函数,c不行,c中最多可以把函数指针当作参数,函数指针不能直接作为返回值,但可以放在结构体中作为返回值。js中还有一个好处就是,回调函数和工具函数写在了一起。这样代码非常紧凑。