iOS 设计模式之原型模式

原型模式是指使用原型实例指定创建对象的种类,并通过复制这个原型创建新的对象。也就是提供一个快速复制对象的快捷方式。

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

简单写一个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了。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 何为原型模式? 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。如图: 使用场景 浅复制与深复制 ...
    清水一心阅读 312评论 0 2
  • 啥叫原型模式? 创建一个新的对象,然后通过复制现有的对象,称为原型。原型本身使用模板创建,后续实例是克隆模板产生的...
    江将蒋酱阅读 758评论 0 1
  • 原型模式 介绍 在许多面向对象的应用程序中,有些对象的创建代价过大或者过于复杂。要是可以重建相同的对象并作轻微的改...
    666真666阅读 473评论 0 2
  • 这篇笔记是对boot loader学习的记录. 现在linux主流的 boot loader就是grub2. bo...
    Edward_f0cus阅读 971评论 0 4
  • 现如今,农村电商发展的欣欣向荣,一派生机勃勃的景象,国家政府的支持和各大电商平台的入驻,农村电商如沐春风,想想也是...
    菜农叔阅读 297评论 0 0