iOS中的工厂模式

作者: wu2016 | 来源:发表于2016-03-24 23:27 被阅读5135次

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

    Demo地址在这里,如果感觉没看懂可以去看看。以上都是我个人理解,如果有不对的地方请大牛们指正

    相关文章

      网友评论

      本文标题:iOS中的工厂模式

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