设计模式之简单工厂模式

2019-04-04  本文已影响0人  HotCatLx

1. 杂篇


2. 基本概念

在有需要创建相同属性或者方法的对象的地方,为了增加扩展性,在客户端调用时不需要涉及到具体的对象创建过程,也不需要知道具体的对象类型,可以使用简单工厂模式

客户端调用只需要面向工厂,具体工厂内的创建对象过程不需要暴露给客户端,且由于抽象类的抽取,在需要更多的对象创建过程,只需要增加新的子类即可


3. 组成和类图

UML类图

抽象类 : 因为需要简单工厂类的使用场景应该是存在相同属性或者方法的类的抽取,所以抽象类的抽取,使得简单工厂类直接面向抽象类,能够增加扩展性
子类 : 抽象类的具体实例化,具体方法的实现

在客户端面向客户端,根据传参的不同,创建具体的子类对象


4. 具体案例

4.1 案例1 : 计算器
4.2 案例1代码
class Operation  {
    var numberFirst : Double = 0.0   //操作数1
    var numberSec : Double = 0.0     //操作数2
    
    func getResult() -> Double {     //获取结果
        let result = 0.0
        return result;
    }
    
}

/*
 * 加法子类
 */
class OperationAdd: Operation {
    override func getResult() -> Double {
        var result = 0.0
        result = numberFirst + numberSec
        return result
    }
}

/*
 * 减法子类
 */
class OperationSub: Operation {
    override func getResult() -> Double {
        var result = 0.0
        result = numberFirst - numberSec
        return result
    }
}
class OperationFactory {

    //传输操作符字符串,根据字符串决定创建什么具体的运算操作子类
    //如果有需求增加了新的运算操作,只需要增加switch判断.并增加一个新的操作运算子类即可,客户端调用不需要改动
    
    func operationWithOperator(operatorStr : String) -> Operation {
        var operation = Operation();
       
        switch operatorStr {
        case "+":
            operation = OperationAdd()
        case "-":
            operation = OperationSub()
        case "*":
            operation = OperationMul()
        case "/":
            operation = OperationDiv()
        default:
            operation = Operation();
        }
        return operation;
    }
}
    override func viewDidLoad() {
        super.viewDidLoad()

        let once = OperationFactory().operationWithOperator(operatorStr: "+")
        once.numberFirst = 15
        once.numberSec = 5
        let result = once.getResult()
        print("result is ",result)
        
    }

5. 思考

上一篇下一篇

猜你喜欢

热点阅读