原型模式是指使用原型實(shí)例指定創(chuàng)建對(duì)象的種類瞒窒,并通過復(fù)制這個(gè)原型創(chuàng)建新的對(duì)象利凑。也就是提供一個(gè)快速?gòu)?fù)制對(duì)象的快捷方式道逗。
當(dāng)然這里的復(fù)制指的是深復(fù)制奸焙,復(fù)制的是對(duì)象瞎暑。
簡(jiǎn)單寫一個(gè)demo:
創(chuàng)建一個(gè)protocol
@protocol ProtocolType <NSObject>
- (id)clone;
@end
然后創(chuàng)建一個(gè)model遵循protocol彤敛,并實(shí)現(xiàn)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里調(diào)用
ProtocolModel *model = [[ProtocolModel alloc] init];
model.name = @"我叫多三胖";
model.age = 18;
model.hobby = @"學(xué)習(xí)";
ProtocolModel *cloneModel = [model clone];
NSLog(@"%@",cloneModel.name);
2018-01-09 13:55:23.657102+0800 iOS 原型模式[8348:887913] 我叫多三胖
當(dāng)然也可以直接在ProtocolModel的- (nonnull id)copyWithZone:(nullable NSZone *)zone
方法里直接復(fù)制。
- (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中復(fù)制對(duì)象用ProtocolModel *cloneModel = [model copy];
就可以了(ProtocolModel需要遵循NSCopying協(xié)議)了赌。
代碼比較簡(jiǎn)單墨榄,就不上傳demo了。