《大話設(shè)計模式》第 1 章 - 簡單工廠模式 的 Swift 實現(xiàn)屠尊。
問題
做一個計算器蓄髓〈叮客戶端輸入兩個數(shù)字和運算符號,得到計算結(jié)果疯攒。
方案
1. 松耦合
把加減乘除等運算分離嗦随,修改其中一個不影響另外的幾個,增加運算算法也不影響其他代碼敬尺。
class Operation{
private var _numberA: Double = 0
private var _numberB: Double = 0
var numberA: Double{
get{
return _numberA
}
set{
_numberA = newValue
}
}
var numberB: Double{
get{
return _numberB
}
set{
_numberB = newValue
}
}
func GetResult() -> Double{
let result: Double = 0
return result
}
}
子類加減乘除等算法類繼承運算類枚尼,重載了父類的運算方法實現(xiàn)運算。如果要修改任何一個算法砂吞,不需要提供其他算法的代碼署恍。
class OperationAdd: Operation{
override func GetResult() -> Double {
var result: Double = 0
result = numberA + numberB
return result
}
}
class OperationSub: Operation{
override func GetResult() -> Double {
var result: Double = 0
result = numberA - numberB
return result
}
}
class OperationMul: Operation{
override func GetResult() -> Double {
var result: Double = 0
result = numberA * numberB
return result
}
}
class OperationDiv: Operation{
override func GetResult() -> Double {
guard numberB != 0 else {
print("除數(shù)不能為 0")
return 0
}
var result: Double = 0
result = numberA / numberB
return result
}
}
2. 多態(tài)
工廠類封裝業(yè)務(wù),只需要輸入運算符號蜻直,工廠就實例化出合適的對象盯质,通過多態(tài)袁串,返回運算類實現(xiàn)計算。
class OperationFactory{
class func createOperate(operate: String) -> Operation?{
var oper: Operation?
switch operate {
case "+":
oper = OperationAdd()
case "-":
oper = OperationSub()
case "*":
oper = OperationMul()
case "/":
oper = OperationDiv()
default: break
}
return oper
}
}
測試
UI 層通過簡單的方式調(diào)用運算類唤殴。
let op = OperationFactory.createOperate(operate: "+")
op?.numberA = 1
op?.numberB = 2
op?.GetResult()