《大话设计模式》第 8 章 - 工厂方法模式 的 Swift 实现。
问题
通过增加工厂方法的子类为新增的运算类生成实例,但不修改原有的工厂方法。
方案
简单工厂方法如果要增加一个运算类,就要给运算工厂类增加一个 case 条件,这样不但对拓展开放了,而且还对修改开放了,违背了 开放-封闭 原则。
于是我们需要工厂方法,它定义了一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。
定义工厂方法创建对象的接口,该方法返回一个 Product 类型的对象
protocol Factory{
func createOperation() -> Operation
}
返回一个 ConcreteProduct 类型的对象
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()
}
}
测试
let operFactory = AddFactory()
let oper = operFactory.createOperation()
oper.numberA = 1
oper.numberB = 2
oper.GetResult()