何为原型模式?
用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。如图:
使用场景
* 需要创建的对象应独立于其类型与创建方式
* 要实例化的类是在运行时决定的
* 不想要与产品层次相对应的工厂层次
* 不同类的实例间的差异仅是状态的若干组合
* 复制已有的组合对象并对副本进行修改会更加容易
浅复制与深复制
深复制:新创建的对象会在内存中开辟新的空间,而把被拷贝对象的值拷贝过来
浅复制:新创建的对象的指针与原对象的指针指向相同的内存空间,并有相同的值
如图:
在Cocoa Touch框架中,为NSObject的派生类提供了实现深复制的协议。NSObject的子类,需要实现NSCopying协议及其方法。
* -(id) copyWithZone:(NSZone*)zone;
【扩展】
NSString属性什么时候用copy,什么时候用strong?
iOS 浅谈:深.浅拷贝与copy.strong
iOS开发——深拷贝与浅拷贝详解
iOS深浅拷贝(纠错)
优缺点
优点:
1、如果创建新的对象比较复杂时,可以利用原型模式简化对象的创建过程,同时也能够提高效率。
2、可以使用深克隆保持对象的状态。
3、原型模式提供了简化的创建结构
缺点
1、在实现深克隆的时候可能需要比较复杂的代码。
2、需要为每一个类配备一个克隆方法,而且这个克隆方法需要对类的功能进行通盘考虑,这对全新的类来说不是很难,但对已有的类进行改造时,不一定是件容易的事,必须修改其源代码,违背了“开闭原则”。