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

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

作者: Ian_ | 来源:发表于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