Design Patterns Talk - Factory Method Pattern

《大话设计模式》第 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()

playground

你可能感兴趣的:(Design Patterns Talk - Factory Method Pattern)