链式编程

模仿masonry写的链式编程的Demo。

任何类都具有计算的功能。
1,首先给N�Sobject 添加个分类:
#import
#import "CaculatorManager.h"
@interface NSObject (CasulatorMarker)
+(int)zdq_caculator:(void(^)(CaculatorManager * mager))block;
@end
2,方法的实现:

+(int)zdq_caculator:(void (^)(CaculatorManager *))block
{
    NSLog(@"mager = %@",block);
    //创建计算管理者
    CaculatorManager * mag = [CaculatorManager new];
    //调用block,进行计算
    block(mag);
    //返回计算的结果。
    return mag.result;
}

3,创建计算管理者,用来管理所有计算:

#import 

@interface CaculatorManager : NSObject
//result:用来保存计算结果。
@property (nonatomic,assign)int result;
//加法
-(CaculatorManager *(^)(int))add;
//减法
-(CaculatorManager *(^)(int))sub;

@end

4,方法的实现:

-(CaculatorManager *(^)(int))add
{
    return ^CaculatorManager *(int a){
    
    self.result += a;
    NSLog(@"加法 %s",__func__);
    return  self;
    };
}

-(CaculatorManager *(^)(int))sub
{
    return ^CaculatorManager * (int a){
    
    self.result -= a;
    NSLog(@"减法 %s",__func__);

    return self;
    };
}

5,方法的调用:

- (void)viewDidLoad {
    [super viewDidLoad];

     int result = [NSObject zdq_caculator:^(CaculatorManager *mager) {
      NSLog(@"mager = %@",mager);
      mager.add(3).add(8).sub(4).sub(1);
    }];
}

6,链式编程思想:

1,每一个操作都返回block,
2,给所有类提供一个计算方法zdq_caculator
3,创建计算制造者,计算制造者提供了很多方法计算,每个计算方法,方法不需要参数,但是必须返回block,每个block需要传入一个参数,计算什么值。
4,传入block,block用于把所有的计算保存到计算制造者中
5,执行block,.把计算制造者计算的值,返回出去。

7,

这个方法如果一般来写:
  mager.add(3).add(8).sub(4).sub(1);

   [[[[mager add:3] add:8] sub:4] sub:1];

  区别就是定义的把block作为返回值,并且block的返回值是计算管理者,这样才能继续调用下去。

你可能感兴趣的:(链式编程)