更多内容,欢迎关注公众号: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及计算机编程的相关文章,以及优秀国外文章翻译,欢迎关注~