携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第13天,点击查看活动详情
设计模式相信大家都很熟悉了,但是越是基础的东西也越是需要经常的回顾与思考,于是着手写一个温故而知新的设计模式回顾系列。
在 8 月,准备把各个常用的不常用的设计模式都进行一次回顾,并大概聊一下各个模式的特点与在 iOS 中的大概使用场景与情况。
这里是设计模式回顾的第十三篇,原型模式的相关回顾。
原型模式
1、什么是原型模式
原型模式是一种创建型设计模式,它通过复制一个已经存在的实例来返回新的实例,而不是新建实例.被复制的实例就是我们所称的原型,这个原型是可定制的. 原型模式多用于创建复杂的或者耗时的实例, 因为这种情况下,复制一个已经存在的实例可以使程序运行更高效,或者创建值相等,只是命名不一样的同类数据.
原型模式实际意义上来说是拷贝、而且一般情况下都是深拷贝。在 iOS 中有相对应的方法 [obj copy]
实现拷贝。
2、原型模式用在什么地方
- 需要复制一个原先的对象
原型模式就是为了复制,所以说他的场合只有这么一个,一般来说,这个对象的创建比较复杂或者说比较耗时的时候,会考虑使用复制。
3、原型模式的使用
- 引用协议
- 实现
- (id)copyWithZone:(NSZone *)zone
方法 - 将所有的属性复制到出来
因为 iOS 自己拥有 copy 协议 ,所以你只需要考虑复制的内容就好,至于怎么生成的就交给程序自己了。
4、总结
由于 iOS 系统本身帮我们实现了许多的内容,导致我们使用原型模式十分方便,也是属于基础的模式之一。
5、demo
SingleView.h
#import <Foundation/Foundation.h>
@interface SingleView : NSObject <NSCopying>
/// 某个属性
@property (nonatomic, strong) NSString *name;
@end
SingleView.m
#import "SingleView.h"
@implementation SingleView
- (id)copyWithZone:(NSZone *)zone {
SingleView *single = [[SingleView allocWithZone:zone] init];
single.name = _name;
return single;
}
@end