iOS设计模式——适配器

原创 2017年01月03日 10:55:45


一  目的:

   为了让客户端尽可能的通用,使用适配器模式来隔离客户端与外部参数的联系,只让客户端与适配器通信.

   适配器对复杂子页面或多种cell的数据展示有很好的优势。


二  原理:

    1.将网络请求下来的数据转换为模型后,放入适配器中

    2.适配器对数据处理(比如高度计算)和选用对应的cell类型

    3.页面数据的展示从适配器中获取模型


    (这些原理在第四步的实际代码应用中会更好理解)


三  适配器类

     .h代码

    

@interface CellDataAdapter : NSObject

/**
 *  Cell's reused identifier.
 */
@property (nonatomic, strong) NSString     *cellReuseIdentifier;

/**
 *  Data, can be nil.
 */
@property (nonatomic, strong) id            data;

/**
 *  Cell's height.
 */
@property (nonatomic)         CGFloat       cellHeight;

/**
 *  Cell's type (The same cell, but maybe have different types).
 */
@property (nonatomic)         NSInteger     cellType;

/**
 *  CellDataAdapter's convenient method.
 *
 *  @param cellReuseIdentifiers Cell's reused identifier.
 *  @param data                 Data, can be nil.
 *  @param cellHeight           Cell's height.
 *  @param cellType             Cell's type (The same cell, but maybe have different types).
 *
 *  @return CellDataAdapter's object.
 */
+ (instancetype)cellDataAdapterWithCellReuseIdentifier:(NSString *)cellReuseIdentifiers
                                                       data:(id)data
                                                 cellHeight:(CGFloat)cellHeight
                                                   cellType:(NSInteger)cellType;

#pragma mark - Optional properties.

/**
 *  The tableView.
 */
@property (nonatomic, weak)   UITableView  *tableView;

/**
 *  TableView's indexPath.
 */
@property (nonatomic, weak)   NSIndexPath  *indexPath;


.m代码

#import "CellDataAdapter.h"

@implementation CellDataAdapter

+ (CellDataAdapter *)cellDataAdapterWithCellReuseIdentifier:(NSString *)cellReuseIdentifiers
                                                       data:(id)data
                                                 cellHeight:(CGFloat)cellHeight
                                                   cellType:(NSInteger)cellType {

    CellDataAdapter *adapter    = [[self class] new];
    adapter.cellReuseIdentifier = cellReuseIdentifiers;
    adapter.data                = data;
    adapter.cellHeight          = cellHeight;
    adapter.cellType            = cellType;
    
    return adapter;
}

@end




四   实际代码应用参考

 

  4.1 控制器导入 #import"CellDataAdapter.h"

 

  4.2 将网络请求后的模型数据放到放到一个方法里处理成适配器

     (dataArray放的是适配器不是模型)

    4.2.1 传入模型数据

   [self.tableDataArrayaddObject:[selfvtNewsModelCellAdapter:self.vtNewsModel]];

    4.2.2 处理成适配器

- (CellDataAdapter *)vtNewsModelCellAdapter:(id)data {

    return [CellDataAdaptercellDataAdapterWithCellReuseIdentifier:@"vtNewsModelCell"data:data   cellHeight:0cellType:0];

}


   5. tableview 代理方法中将适配器传给cell。

 cell包含适配器属性 :

   @property (nonatomicweakCellDataAdapter         *dataAdapter;

     customCell.dataAdapter = dataAdapter;




   6. cell加载需要的数据模型从适配器获取

    (其他信息比如有高度值,cell类型等,从适配器中获取)

     VtNewsModel *model      =self.dataAdapter.data;


   

  





版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

iOS常用设计模式——适配器Adapter

本文介绍了iOS常用设计模式中的Adapter,Adapter在Objective-C中通常使用对象型Adapter,这种设计模式常用的场景是遗留代码复用和类库迁移等,iOS程序员在使用UITable...

IOS设计模式学习(8)适配器

1 前言 在面向对象软件设计中,有时候我们想把有用而经过精心测试的类,用于应用程序的其他新领域。但是,新功能需要新接口,而新接口与要复用的现有类不一致的情况非常普遍。我们不想为新的接口而重写可靠的类。...

IOS设计模式学习(8)适配器

1 前言 在面向对象软件设计中,有时候我们想把有用而经过精心测试的类,用于应用程序的其他新领域。但是,新功能需要新接口,而新接口与要复用的现有类不一致的情况非常普遍。我们不想为新的接口而重写可靠的类...

Java设计模式透析之 —— 适配器(Adapter)

今天一大早,你的leader就匆匆忙忙跑过来找到你:“快,快,紧急任务!最近ChinaJoy马上就要开始了,老板要求提供一种直观的方式,可以查看到我们新上线的游戏中每个服的在线人数。” 你看了看日期,...

Java设计模式之——适配器

适配器:基于现有类所提供的服务,向客户提供接口,以满足客户的期望                                                         《Java设计模式》 ...

【设计模式】【狼和羊的爱情故事——双向适配器】

话说自从灰太狼抓到羊后,他们一家三口就过着幸福美满的生活。随着时间的流逝,灰太狼渐渐老去并挂掉,临死前他将自己的抓羊秘技传给了已经成年的小灰灰,并留下一件狼皮和一件羊皮。小灰灰也承担起了抓羊的重任。 ...

我与C++设计模式(六)——适配器

桥接模式的这个骨头过去感觉好一点了

Java设计模式透析之 —— 适配器(Adapter)

今天一大早,你的leader就匆匆忙忙跑过来找到你:“快,快,紧急任务!最近ChinaJoy马上就要开始了,老板要求提供一种直观的方式,可以查看到我们新上线的游戏中每个服的在线人数。” ...

Java设计模式透析之 —— 适配器(Adapter)

转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/9400141 今天一大早,你的leader就匆匆忙忙跑过来找到你:“快,快,紧急任...

Java设计模式透析之 —— 适配器(Adapter)

转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/9400141 今天一大早,你的leader就匆匆忙忙跑过来找到你:“快,快,紧...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:iOS设计模式——适配器
举报原因:
原因补充:

(最多只允许输入30个字)