首页 > 解决方案 > Swift 中的类类型工厂

问题描述

有没有办法创建一个类类型工厂?

我的代码目前看起来像这样(过于简单):

var blah: BaseObject? //has function "setup()"
switch(objectType) {
    case .one
        blah = Object1() //inherits BaseObject overrides "setup()" 
    case .two 
        blah = Object2() //inherits BaseObject overrides "setup()""
    ...
}
blah?.setup()

但是,我想知道我是否可以将其更改为这样的东西?

let blah: getClassType(from: objectType) = BaseObjectBuilder.create() 
// uses something like: static func create<T: BaseObject>() -> T

“setup()”将移至 create() 方法

这部分似乎是杀手:getClassType(objectType)

能够根据某些参数定义类类型吗?如果这是不可能的,有没有人有不同的建议来清理它?

标签: swift

解决方案


我不太明白你在追求什么,但通常的工厂模式对我来说似乎很干净:

class BaseObject {
    func setup() { print("base object setup") }
    required init() {}
    static func factory() -> Self {
        let obj = self.init()
        obj.setup()
        return obj
    }
}
class Object1 : BaseObject {
    override func setup() { print("object1 setup") }
}
class Object2 : BaseObject {
    override func setup() { print("object2 setup") }
}

这是有效的,因为 Self 是多态的。这是一个示例,表明它做了正确的事情:

// I want a new Object1
let obj1 = Object1.factory()
// obj1 is typed as Object1, and "object1 setup" was printed

推荐阅读