[iOS Swift] Factory——工厂模式的使用与理解

工厂模式属于创建型模式,用于封装复杂对象的创建过程,使其能够在运行时动态创建对象。

示例代码:

protocol Currency {
    func symbol() -> String
    func code() -> String
}

class Euro : Currency {
    func symbol() -> String {
        return "€"
    }

    func code() -> String {
        return "EUR"
    }
}

class UnitedStatesDolar : Currency {
    func symbol() -> String {
        return "$"
    }

    func code() -> String {
        return "USD"
    }
}

enum Country {
    case UnitedStates, Spain, UK, Greece
}

enum CurrencyFactory {
    static func currencyForCountry(country:Country) -> Currency? {

        switch country {
            case .Spain, .Greece :
                return Euro()
            case .UnitedStates :
                return UnitedStatesDolar()
            default:
                return nil
        }
    }
}

使用方法:

let noCurrencyCode = "No Currency Code Available"

CurrencyFactory.currencyForCountry(country: .Greece)?.code() ?? noCurrencyCode
CurrencyFactory.currencyForCountry(country: .Spain)?.code() ?? noCurrencyCode
CurrencyFactory.currencyForCountry(country: .UnitedStates)?.code() ?? noCurrencyCode
CurrencyFactory.currencyForCountry(country: .UK)?.code() ?? noCurrencyCode

理解

从使用角度更容易理解,多种类型的实例都可以通过统一的接口动态创建,只需要动态传入相应的参数即可。

工厂模式比较适合相对复杂对象的创建,简单类也如此封装反而增加了代码的复杂度。

Swift可以通过枚举来创建工厂类。

(用工厂类来实现ViewController的分配是否合理?可以试试看。)

参考

  • Design Patterns In Swift
  • 设计模式之工厂模式

你可能感兴趣的:([iOS Swift] Factory——工厂模式的使用与理解)