最近,前端異常的火爆,我以爲有如下緣由,第一,因爲微信開發很是的火,第二,用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中還有一個好處就是,回調函數和工具函數寫在了一塊兒。這樣代碼很是緊湊。