责任链模式
责任链模式基础构成:
成员变量的类型和Abstract Class类型一致。
责任链类的基本结构:
1)定义一个(同类型的类)成员变量;
2)响应者的处理方法handle(参数block回调处理结果)作为响应链的入口或者节点函数;
3)各个业务的处理方法handleBusiness(参数block回调返回结果)
案例:(注意点:在链接的时候注意不要完成循环责任链)
#import <Foundation/Foundation.h> @class BusinessObject; typedef void(^CompletionBlock)(BOOL handled); typedef void(^ResultBlock)(BusinessObject *handler, BOOL handled); @interface BusinessObject : NSObject // 下一个响应者(响应链构成的关键) @property (nonatomic, strong) BusinessObject *nextBusiness; // 响应者的处理方法 - (void)handle:(ResultBlock)result; // 各个业务在该方法当中做实际业务处理 - (void)handleBusiness:(CompletionBlock)completion; @end
#import "BusinessObject.h" @implementation BusinessObject // 责任链入口方法 - (void)handle:(ResultBlock)result { CompletionBlock completion = ^(BOOL handled){ // 当前业务处理掉了,上抛结果 if (handled) { result(self, handled); } else{ // 沿着责任链,指派给下一个业务处理 if (self.nextBusiness) { [self.nextBusiness handle:result]; } else{ // 没有业务处理, 上抛 result(nil, NO); } } }; // 当前业务进行处理 [self handleBusiness:completion]; } - (void)handleBusiness:(CompletionBlock)completion { /* 业务逻辑处理 如网络请求、本地照片查询等 */ } @end
案例:业务A之后处理业务B,之后处理业务C,改变业务顺序?业务C 之后 指向 业务B 之后指向 A 最后指向 nil.
考察的就是责任链模式;
业务编码可以做成KeyValue的一个plist文件,通过后端下发,动态调整,动态下发;