工厂模式属于创建型模式,用于封装复杂对象的创建过程,使其能够在运行时动态创建对象。
示例代码:
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的分配是否合理?可以试试看。)