《大話設(shè)計(jì)模式》第 8 章 - 工廠方法模式 的 Swift 實(shí)現(xiàn)囱修。
問(wèn)題
通過(guò)增加工廠方法的子類為新增的運(yùn)算類生成實(shí)例材义,但不修改原有的工廠方法噩咪。
方案
簡(jiǎn)單工廠方法如果要增加一個(gè)運(yùn)算類潘飘,就要給運(yùn)算工廠類增加一個(gè) case 條件踩娘,這樣不但對(duì)拓展開(kāi)放了择镇,而且還對(duì)修改開(kāi)放了髓考,違背了 開(kāi)放-封閉 原則仁卷。
于是我們需要工廠方法纵刘,它定義了一個(gè)用于創(chuàng)建對(duì)象的接口邀窃,讓子類決定實(shí)例化哪一個(gè)類。工廠方法使一個(gè)類的實(shí)例化延遲到其子類假哎。
定義工廠方法創(chuàng)建對(duì)象的接口瞬捕,該方法返回一個(gè) Product 類型的對(duì)象
protocol Factory{
func createOperation() -> Operation
}
返回一個(gè) ConcreteProduct 類型的對(duì)象
class AddFactory: Factory{
func createOperation() -> Operation {
return OperationAdd()
}
}
class SubFactory: Factory{
func createOperation() -> Operation {
return OperationSub()
}
}
class MulFactory: Factory{
func createOperation() -> Operation {
return OperationMul()
}
}
class DivFactory: Factory{
func createOperation() -> Operation {
return OperationDiv()
}
}
測(cè)試
let operFactory = AddFactory()
let oper = operFactory.createOperation()
oper.numberA = 1
oper.numberB = 2
oper.GetResult()