链式编程实现一个简易计算器

链式编程优点

  1. 使用点语法调用,代码优雅,可读性强。

链式编程特点

  1. 模仿 getter 方法写法,使得支持点语法调用
  2. 让 block 当做 getter 方法返回值,其中 block 的返回值为对象本身,这样才能实现连续的点语法调用。

调用效果

一行代码实现整个计算过程。

实现过程

  • NSObject (CalculatorManager) 分类
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
/**
链式调用

@param calculator void(^)(CalculatorManager *manager) 类型 block
@return 返回计算的结果
*/
+ (double)makeCalculator:(void(^)(CalculatorManager *manager))calculator;{

// 1. 创建 CalculatorManager 对象实例
CalculatorManager *cal = [[CalculatorManager alloc] init];

// 2. 调用block
calculator(cal);

// 3. 返回计算结果
return cal.equal();
}
  • CalculatorManager 类
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
@implementation CalculatorManager
{
double _result;
}

/// 加法
- (CalculatorManager *(^)(double value))add
{
return ^CalculatorManager * (double value){
_result += value;
return self;
};
}

/// 减法
- (CalculatorManager *(^)(double value))minus
{
return ^CalculatorManager * (double value){
_result -= value;
return self;
};
}

/// 乘法
- (CalculatorManager *(^)(double value))multiply
{
return ^CalculatorManager * (double value){
_result *= value;
return self;
};
}

/// 除法
- (CalculatorManager *(^)(double value))divide
{
return ^CalculatorManager * (double value){
_result /= value;
return self;
};
}

/// 返回计算结果
- (double (^)())equal
{
return ^double{
return _result;
};
}

@end

源码

地址

0%