工作生活

设计模式 -- 原型模式

2019-07-06  本文已影响0人  皆为序幕_

表述 (创建型模式)

用原型实例指定创建对象的种类,并通过复制这个原型创建新的对象

这里的复制指深复制 关于深浅复制传送门
深复制就是开辟新内存实现真正的内存复制
浅复制, 只复制指针, 堆内存不变.

原型模式类图

原型模式类图

优点

简化对象的创建,把创建的过程封闭到对象的内部

使用场景

示例

需求:要求有个人信息类,必须有姓名和年龄,最终需要三份个人信息

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
上一篇下一篇

猜你喜欢

热点阅读