原型模式在swift中的体现

2021-11-28  本文已影响0人  梁森的简书

通过对一个对象进行copy创建出一个新的对象。
在swift中我们可以创建一个copying协议,某个类遵守该协议后,便可以使用copying协议中的copy方法,copy出一个新的对象。
copying协议:

public protocol Copying: AnyObject {
    // 声明 required initializer
    init(_ prototype: Self)
}

extension Copying {
    // 通常不直接调用初始化器,而是调用 copy() 方法
    public func copy() -> Self {
        return type(of: self).init(self)
    }
}

遵守copying协议的类

// Monster 类遵守 Copying 协议
public class Monster: Copying {
    public var health: Int
    public var level: Int
    
    public init(health: Int, level: Int) {
        self.health = health
        self.level = level
    }
    
    public required convenience init(_ monster: Monster) {
        self.init(health: monster.health, level: monster.level)
    }
}

我们需要将实现的协议方法init(_ prototype: Self)声明成required。
demo地址:
https://github.com/pro648/BasicDemos-iOS/tree/master/PrototypePattern

上一篇 下一篇

猜你喜欢

热点阅读