美文网首页
iOS 设计模式之原型模式

iOS 设计模式之原型模式

作者: GlassHead | 来源:发表于2018-01-09 14:15 被阅读0次
    原型模式是指使用原型实例指定创建对象的种类,并通过复制这个原型创建新的对象。也就是提供一个快速复制对象的快捷方式。

    当然这里的复制指的是深复制,复制的是对象。

    简单写一个demo:

    创建一个protocol

    @protocol ProtocolType <NSObject>
    
    - (id)clone;
    
    @end
    

    然后创建一个model遵循protocol,并实现protocol方法

    @interface ProtocolModel : NSObject <NSCopying,ProtocolType>
    
    @property (nonatomic, copy) NSString *name;
    
    @property (nonatomic, assign) NSUInteger age;
    
    @property (nonatomic, copy) NSString *hobby;
    
    @end
    
    - (nonnull id)copyWithZone:(nullable NSZone *)zone { 
        return [[self class] allocWithZone:zone];
    }
    
    - (id)clone {
        ProtocolModel *model = [[ProtocolModel alloc] init];
        model.name           = self.name;
        model.age            = self.age;
        model.hobby          = self.hobby;
        return model;
    }
    

    然后去VC里调用

        ProtocolModel *model = [[ProtocolModel alloc] init];
        model.name           = @"我叫多三胖";
        model.age            = 18;
        model.hobby          = @"学习";
        
        ProtocolModel *cloneModel = [model clone];
        NSLog(@"%@",cloneModel.name);
    
    2018-01-09 13:55:23.657102+0800 iOS 原型模式[8348:887913] 我叫多三胖
    

    当然也可以直接在ProtocolModel的- (nonnull id)copyWithZone:(nullable NSZone *)zone方法里直接复制。

    - (nonnull id)copyWithZone:(nullable NSZone *)zone { 
        ProtocolModel *model = [[ProtocolModel alloc] init];
        model.name           = self.name;
        model.age            = self.age;
        model.hobby          = self.hobby;
        return model;
    }
    

    然后VC中复制对象用ProtocolModel *cloneModel = [model copy];就可以了(ProtocolModel需要遵循NSCopying协议)。

    代码比较简单,就不上传demo了。

    相关文章

      网友评论

          本文标题:iOS 设计模式之原型模式

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