美文网首页
整洁的代码: 适配器模式(Adaptor)

整洁的代码: 适配器模式(Adaptor)

作者: 幸运者_Lucky | 来源:发表于2017-04-10 15:51 被阅读45次

    什么是适配器模式?

    例: 我们现在有很多不同种的螺母, 但只有一个螺钉, 螺钉都需要经过处理之后才可以用在螺母上, 处理螺钉的工具就叫做适配器。

    日常开发中,经常遇到多个视图上需要呈现来自一处的数据, 每个视图的数据处理,就可以定义适配器, 对数据进行处理, 每个适配器对数据处理, 返回给对应的视图, 当然使用一个类来包含所有适配器是可以的, 但是如果过多的处理堆在一个类中, 不方便日后阅读, 所以我建议, 每个适配器都建一个类.

    // 声明 Adaptor
    @property (nonatomic, strong) id<AdaptorProtocol> adaptor;
    
    // 获取数据
    #pragma mark - APIManagerDelegate
    - (void)apiManagerDidSuccess:(APIManager *)manager {
        NSDictionary *datas = [manager fetchDataWithAdaptor:self.adaptor]; // 通知数据源, 提供数据给 Adaptor 并让 Adaptor 执行数据处理, 返回数据.
        NSLog(@"%@", datas);
    }
    
    // 初始化
    - (id<AdaptorProtocol>)adaptor {
        if (!_adaptor) {
            _adaptor = [[Adaptor alloc] init];
        }
        return _adaptor;
    }
    

    在 数据源 统一处理执行 Adaptor 的方法, 数据源不管你需要什么数据, 只把自己持有的数据给 Adaptor, 让 Adaptor 处理数据.

    // APIManager.m
    - (NSDictionary *)fetchDataWithAdaptor:(id<AdaptorProtocol>)adaptor {
        if (adaptor == nil) {
            return nil;
        } else {
            return [adaptor configDataWithManager:self]; // 执行数据处理
        }
    }
    
    //  Adaptor.h
    #import "APIManager.h"
    
    extern NSString * const kAdaptorKeyGender;
    extern NSString * const kAdaptorKeyName;
    
    @interface Adaptor : NSObject<AdaptorProtocol>
    
    @end
    
    //  Adaptor.m
    #import "Adaptor.h"
    
    NSString * const kAdaptorKeyGender = @"kAdaptorKeyGender";
    NSString * const kAdaptorKeyName = @"kAdaptorKeyName";
    
    @implementation Adaptor
    
    - (NSDictionary *)configDataWithManager:(APIManager *)manager {
    // 处理数据, 并返回数据
        return @{kAdaptorKeyName:manager.dic[@"name"], kAdaptorKeyGender:manager.dic[@"gender"]};
    }
    @end
    

    如果需要一种新的数据格式, 就可以增加一个新的 Adaptor, 来做相应的处理即可.

    使用适配模式, 主要是为了把数据处理从 view 中抽出来, 方便日后的测试和修改.

    相关文章

      网友评论

          本文标题:整洁的代码: 适配器模式(Adaptor)

          本文链接:https://www.haomeiwen.com/subject/jjqvottx.html