這章會(huì)引用到 簡(jiǎn)單工廠模式的代碼,主要就是用來區(qū)分 簡(jiǎn)單工廠模式與工廠方法模式的區(qū)別
簡(jiǎn)單工廠模式請(qǐng)自行跳轉(zhuǎn)
http://www.reibang.com/p/4b6f0bf57de9
工廠方法模式基本邏輯
// 運(yùn)算基類
class Operation: NSObject {
private var _numberA:Double = 0
private var _numberB:Double = 0
var numberA:Double {
set{
_numberA = newValue
}
get{
return _numberA
}
}
var numberB:Double {
set{
_numberB = newValue
}
get{
return _numberB
}
}
func getResult() -> Double {
var result:Double = 0
return result
}
}
// 運(yùn)算子類
class OperationAdd: Operation {
// 加法運(yùn)算類
override func getResult()->Double{
var result:Double = 0
result = numberA + numberB
return result
}
}
class OperationSub: Operation {
// 減法運(yùn)算類
override func getResult() -> Double {
var result:Double = 0
result = numberA - numberB
return result
}
}
class OperationMul: Operation {
// 乘法運(yùn)算類
override func getResult() -> Double {
var result:Double = 0
result = numberA * numberB
return result
}
}
class OperationDiv: Operation {
// 除法運(yùn)算類
override func getResult() -> Double {
var result:Double = 0
if numberB != 0 {
result = numberA / numberB
} else {
result = 0
}
return result
}
}
// 工廠協(xié)議及工廠類
protocol IFactory {
func createOperation()->Operation
}
class AddFactory:IFactory {
func createOperation() -> Operation {
return OperationAdd()
}
}
class SubFactory:IFactory {
func createOperation() -> Operation {
return OperationSub()
}
}
class MulFactory:IFactory {
func createOperation() -> Operation {
return OperationMul()
}
}
class DivFactory:IFactory {
func createOperation() -> Operation {
return OperationDiv()
}
}
// 客戶端代碼
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let operFactory = AddFactory()
let oper = operFactory.createOperation()
oper.numberA = 1
oper.numberB = 2
var result:Double = oper.getResult()
print("結(jié)果是:",result);
// 結(jié)果是: 3.0
}
}
以上即是工廠方法模式的基本實(shí)現(xiàn), 對(duì)比簡(jiǎn)單工廠模式,可以看出 如果簡(jiǎn)單工廠模式需要添加新的方法與邏輯時(shí)候, 需要添加相應(yīng)的類,以及在工廠類里面添加相應(yīng)的case判斷邏輯, 這樣其實(shí)違背了開放封閉原則;
在工廠方法模式中,就可以避免違背開放封閉原則,如果需要添加新的方法邏輯,不需要修改原有的工廠類,只需要增加此功能的運(yùn)算類和相應(yīng)的工廠類就可以了.
但是! 工廠方法模式實(shí)現(xiàn)時(shí),客戶端需要決定實(shí)例化哪一個(gè)工廠類來實(shí)現(xiàn)運(yùn)算類,選擇判斷的問題還是存在的, 也就是說, 工廠方法把簡(jiǎn)單工廠的內(nèi)部邏輯判斷移到了客戶端代碼來進(jìn)行,你想要加功能,本來是修改工廠類的, 而現(xiàn)在是修改客戶端代碼!
這里需要用到反射的方法了,在之后的抽象工廠模式中會(huì)提到