更多内容欢迎关注公众号:Swift花园
了解静态工厂,简单工厂,工厂方法和抽象工厂四种设计模式在 Swift 语言中的区别。
前面的文章介绍了所有的工厂模式,现在让我们来区分一下它们。构建过程相对直接,在范例中我将用到 UIColor 来演示一些基础概念。🧙♂️
静态工厂
- 没有独立的工厂类
- 通过命名的静态方法来初始化对象
- 可缓存,可返回子类型
extension UIColor {
static var primary: UIColor { return .black }
static var secondary: UIColor { return .white }
}
let primary = UIColor.primary
let secondary = UIColor.secondary简单工厂
- 一个工厂类
- 内部用 switch case 创建不同对象
- 包装不同的代码
- 如果代码量太大,可以改成工厂方法
class ColorFactory {
enum Style {
case primary
case secondary
}
func create(_ style: Style) {
switch style
case .primary:
return .black
case .secondary:
return .white
}
}
let factory = ColorFactory()
let primary = factory.create(.primary)
let secondary = factory.create(.secondary)工厂方法
- 多个 (解耦的) 工厂类
- 每个工厂方法创建一个实例
- 为工厂创建一个简单的协议
protocol ColorFactory {
func create() -> UIColor
}
class PrimaryColorFactory: ColorFactory {
func create() -> UIColor {
return .black
}
}
class SecondaryColorFactory: ColorFactory {
func create() -> UIColor {
return .white
}
}
let primaryColorFactory = PrimaryColorFactory()
let secondaryColorFactory = SecondaryColorFactory()
let primary = primaryColorFactory.create()
let secondary = secondaryColorFactory.create()抽象工厂
- 通过工厂方法组合简单工厂
- 对整个app有全局影响
// 跟上面一样的工厂方法
protocol ColorFactory {
func create() -> UIColor
}
class PrimaryColorFactory: ColorFactory {
func create() -> UIColor {
return .black
}
}
class SecondaryColorFactory: ColorFactory {
func create() -> UIColor {
return .white
}
}
// 使用简单工厂的工厂方法
class AppColorFactory: ColorFactory {
enum Theme {
case dark
case light
}
func create(_ theme: Theme) -> UIColor {
switch theme {
case .dark:
return PrimaryColorFactory().create()
case .light:
return SecondaryColorFactory().create()
}
}
}
let factory = AppColorFactory()
let primaryColor = factory.create(.dark)
let secondaryColor = factory.create(.light)以上 Swift 世界中几种工厂模式的实例代码。希望对你有所帮助。👍
我的公众号 这里有Swift及计算机编程的相关文章,以及优秀国外文章翻译,欢迎关注~
