用原型实例指定创建对象的种类,并通过复制这个原型创建新的对象
这里的复制指深复制 关于深浅复制传送门 深复制就是开辟新内存实现真正的内存复制 浅复制, 只复制指针, 堆内存不变.
原型模式类图
简化对象的创建,把创建的过程封闭到对象的内部
需求:要求有个人信息类,必须有姓名和年龄,最终需要三份个人信息
class Info {
var name : String
var age : Int
init(name:String,age:Int) {
self.name = name
self.age = age
}
func show() {
print("name:\(name),age:\(age)")
}
}
let info0 = Info.init(name: "小白",age: 18)
info0.show() //name:小白,age:18
let info1 = Info.init(name: "小白",age: 18)
info1.show() //name:小白,age:18
let info2 = Info.init(name: "小白",age: 18)
info2.show() //name:小白,age:18
可以看到三份信息需要实例化三次,如果是要n份,就需要实例化n次,这显然不是希望的样子
iOS中,采纳NSCopying协议,通过这个协议来实现对象的深拷贝
class Info : NSCopying {
var name : String
var age : Int
init(name:String,age:Int) {
self.name = name
self.age = age
}
func show() {
print("name:\(name),age:\(age)")
}
func copy(with zone: NSZone? = nil) -> Any {
return Info (name: name, age: age)
}
}
let info0 = Info.init(name: "小白",age: 18)
info0.show() //name:小白,age:18
let info1 = info0.copy() as! Info
info1.show() //name:小白,age:18
let info2 = info0.copy() as! Info
info2.show() //name:小白,age:18