美文网首页
Design Patterns Talk - Factory M

Design Patterns Talk - Factory M

作者: su3 | 来源:发表于2017-04-06 23:43 被阅读0次

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

          本文链接:https://www.haomeiwen.com/subject/dtecattx.html