[Swift设计模式] 比较工厂设计模式

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