美文网首页
iOS中工厂模式

iOS中工厂模式

作者: 泥孩儿0107 | 来源:发表于2017-12-09 15:45 被阅读0次

    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的创建也是可以通过工厂模工进行创建的,这里就不详细介绍了,下面链接中有这样的一个例子,有兴趣的可以下载下来看看

    相关文章

      网友评论

          本文标题:iOS中工厂模式

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