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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容