工廠模式屬于創(chuàng)建型模式,用于封裝復雜對象的創(chuàng)建過程,使其能夠在運行時動態(tài)創(chuàng)建對象。
示例代碼:
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
理解
從使用角度更容易理解,多種類型的實例都可以通過統(tǒng)一的接口動態(tài)創(chuàng)建,只需要動態(tài)傳入相應的參數(shù)即可。
工廠模式比較適合相對復雜對象的創(chuàng)建,簡單類也如此封裝反而增加了代碼的復雜度。
Swift可以通過枚舉來創(chuàng)建工廠類。
(用工廠類來實現(xiàn)ViewController的分配是否合理?可以試試看。)