原型模式是指使用原型实例指定创建对象的种类,并通过复制这个原型创建新的对象。也就是提供一个快速复制对象的快捷方式。
当然这里的复制指的是深复制,复制的是对象。
简单写一个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了。
网友评论