责任链模式

责任链模式基础构成:

成员变量的类型和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文件,通过后端下发,动态调整,动态下发;

 

 

 

posted @ 2023-03-20 11:02  Belinda_sl  阅读(17)  评论(0编辑  收藏  举报