UML图示:
简单工厂模式.png加(CaculateAdd)、减(CaculateMinus)、乘(CaculateMultiply)、除类全部遵守CaculateDelegate协议,实现计算方法
CaculateDelegate 协议类
//简单加、减、乘、除代理
protocol CaculateDelegate {
var numberA: Float {
get set
}
var numberB: Float {
get set
}
func caculate() -> Float
}
加、减、乘、除类
- 注 指列举加法实现,其它类似
class CaculateAdd: NSObject, CaculateDelegate {
var numberA: Float = 0.0
var numberB: Float = 0.0
func caculate() -> Float {
return numberA + numberB
}
}
工厂类
//工厂类,统一返回对象,如果要添加新的对象,新建类,并添加至case中
class Factory: NSObject {
class func createOperator(operatorParameter: String) -> AnyObject{
let operators = ["+", "-", "*", "/"];
let type: CaculateType = CaculateType(rawValue: operators.index(of: operatorParameter) ?? 0) ?? CaculateType.Add
switch type {
case .Add:
return CaculateAdd()
case .Minus:
return CaculateMinus()
case .Multiply:
return CaculateMultiply()
case .Divide:
return CaculateDivide()
}
}
}
优缺点
- 优点:客户端不需要修改代码。
- 缺点:当需要增加新的运算类的时候,不仅需新加运算类,还要修改工厂类,违反了开闭原则。
对于计算器这样的简单的设计,如果不借助工厂模式, 那么就要我们自己对不同的运算做相应的处理。这样一是不易维护,二是不是扩展。当然,工厂模式只是应对一些简单的场景。工厂模式囊括了所有的情况,如果要增加其它的情况,就需要修改工厂类。
网友评论