iOS中工厂模式

2017-12-09  本文已影响0人  泥孩儿0107

iOS中工厂模式我的理解是:利用OC语言的特性“多态”来创建不同的对象

如果后台提供的一个接口中有两至三种不同的数据,比如说有些是新闻,有些是图片,有些是音乐,那么该如非常方便的去使用这些数据在页面上展示出来呢?

在这里举个简单的例子:

先创建一个BaseModel,然后再News,Music,Images继承于BaseModel,然后在BaseModel中写一个便利构造器:

//创建一个便利构造器

+ (instancetype)initWithDictionary:(NSDictionary *)dictionary;

// 根据字典内提供的数据分别创建出对应的model来获取数据

+ (instancetype)initWithDictionary:(NSDictionary *)dictionary

{

// 先使用当前类(父类)创建出model对象

BaseModel *model = nil;

// 根据字典中key对应的数据初始化不同的子类对象并将其返回给我们的父类

if ([dictionary[@"tag"] isEqualToString:@"news"]) {

model = [[News alloc] init];

} else if ([dictionary[@"tag"] isEqualToString:@"images"]){

model = [[Images alloc] init];

} else if([dictionary[@"tag"] isEqualToString:@"music"]){

model = [[Music alloc] init];

}

[model setValuesForKeysWithDictionary:dictionary];

return model;

}

这里直接使用plist文件写一些死数据来展示,那么在tableView中的展示数组该如何获取值呢?

- (NSMutableArray *)dataArray

{

if(!_dataArray)

{

_dataArray = [NSMutableArray array];

NSString *path = [[NSBundle mainBundle] pathForResource:@"data" ofType:@"plist"];

NSArray *arr = [NSArray arrayWithContentsOfFile:path];

for (NSDictionary *dic in arr) {

BaseModel *model = [BaseModel initWithDictionary:dic];

// 将不同子类创建出的model对象添加到我们的数组当中

[_dataArray addObject:model];

}

}

return _dataArray;

}

这样数组dataArray中存的就是我们想要的三种不同的对象。再去展示到页面上就可以了。

当然在展示到Cell上的时候,不同的Model对象需要的Cell也是不同的,所以Cell的创建也是可以通过工厂模工进行创建的,这里就不详细介绍了,下面链接中有这样的一个例子,有兴趣的可以下载下来看看

上一篇下一篇

猜你喜欢

热点阅读