[Swift设计模式] 简单工厂

443 阅读2分钟
更多内容,欢迎关注公众号:Swift花园
喜欢文章?不如来点赞关注吧

这一回让我们来聊聊简单工厂设计模式,用它在Swift中封装对象的创建过程。

 

用 switch-case 来实现简单工厂

简单工厂模式的目标是封装一些经常变化的事情。想象一个调色板应用,你需要根据设计师的日常习惯,比如最近的常用的颜色来改变调色板的默认颜色。如果要手工搜索和替换每一处创建的颜色实例会很麻烦。让我们在 Swift 中创建一个简单工厂,它基于给定的样式返回不同的颜色。🎩

class ColorFactory {

    enum Style {
        case text
        case background
    }

    func create(_ style: Style) -> UIColor {
        switch style {
        case .text:
            return .black
        case .background:
            return .white
        }
    }
}

let factory = ColorFactory()
let textColor = factory.create(.text)
let backgroundColor = factory.create(.background)

简单工厂十分有用,特别是在对象的构造过程很复杂的情况下。你也可以定义一个协议,在它的实现中通过 switch-case 块返回各种不同的实例类型。🚦

protocol Environment {
    var identifier: String { get }
}

class DevEnvironment: Environment {
    var identifier: String { return "dev" }
}

class LiveEnvironment: Environment {
    var identifier: String { return "live" }
}

class EnvironmentFactory {
    
    enum EnvType {
        case dev
        case live
    }
    
    func create(_ type: EnvType) -> Environment {
        switch type {
        case .dev:
            return DevEnvironment()
        case .live:
            return LiveEnvironment()
        }
    }
}

let factory = EnvironmentFactory()
let dev = factory.create(.dev)
print(dev.identifier)

下面有几条关于简单工厂需要记住的东西。

  • 它通过分离构造和使用逻辑实现松散耦合。 🤔
  • 它只是一种对于经常变化的事情的包装器。 🤷‍♂️
  • Swift 里的简单工厂可以采用 enum 和 switch-case 来实现。
  • 如果你想返回不同的对象,可以使用协议。(POP 🎉)
  • 保持简单 🏭

这个设计模式将创建过程和实际使用分离开,将创建的责任移给特定的角色。如果创建过程有变化,只需要改动工厂即可,其他代码可以完全不变。强大又简单!💪

 

我的公众号
这里有Swift及计算机编程的相关文章,以及优秀国外文章翻译,欢迎关注~