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