设计模式-01.简单工厂方法
这是我尝试写的第一篇文章,以软件开发的设计模式开始,记录一下自己的理解与心得,方便以后回过头来查看。以简单工厂开始:
什么是简单工厂?
简单工厂模式(Simple Factory Pattern)是一种创建型设计模式,它提供了一种简单的方法来创建对象,而不需要直接暴露对象的创建逻辑给客户端。
UML 类图
以计算器为例子,拥有加减乘除功能,画出类图:
具体示例
// 运算符接口
protocol Operation {
var numberA: Double { set get }
var numberB: Double { setget }
func calculate() -> Double
}
// 加法运算类
struct OperationAdd: Operation {
var numberA: Double = 0.0
var numberB: Double = 0.0
func calculate() -> Double {
return numberA + numberB
}
}
// 减法运算类
struct OperationSub: Operation {
var numberA: Double = 0.0
var numberB: Double = 0.0
func calculate() -> Double {
return numberA - numberB
}
}
// 乘法运算类
struct OperationMul: Operation {
var numberA: Double = 0.0
var numberB: Double = 0.0
func calculate() -> Double {
return numberA * numberB
}
}
// 除法运算类
struct OperationDiv: Operation {
var numberA: Double = 0.0
var numberB: Double = 0.0
func calculate() -> Double {
if numberB != 0 {
return numberA / numberB
}
return 0
}
}
// 简单工厂类
class OperationFactory {
static func createOperate(_ operate: String) -> Operation? {
switch operate {
case "+":
return OperationAdd()
case "-":
return OperationSub()
case** "*":
return OperationMul()
case "/":
return OperationDiv()
default: return nil
}
}
}
// 客户端调用
// 加法运算
var addOperation = OperationFactory.createOperate("+")
addOperation?.numberA = 1
addOperation?.numberB = 2
addOperation?.calculate()
// 减法运算
var subOperation = OperationFactory.createOperate("-")
subOperation?.numberA = 1
subOperation?.numberB = 2
subOperation?.calculate()
// 乘法运算
var mulOperation = OperationFactory.createOperate("*")
mulOperation?.numberA = 1
mulOperation?.numberB = 2
mulOperation?.calculate()
// 除法运算
var divOperation = OperationFactory.createOperate("/")
divOperation?.numberA = 1
divOperation?.numberB = 2
divOperation?.calculate()
简单工厂方法总结
优点:
- 将对象的创建逻辑集中在工厂类中,降低了客户端的复杂度。
- 隐藏了创建对象的细节,客户端只需要关心需要创建何种对象,无需关心对象是如何创建的。
- 可以通过修改工厂类来轻松添加新的产品类
缺点:
- 如果产品的类太多,会导致工厂类中的代码变得很复杂,难以维护。
- 添加新产品时,需要修改工厂类,也就是会在
OperationFactory
类中新增case
语句,这违背了开闭原则。
总体而言,简单工厂模式适用于创建对象的逻辑相对简单,且产品类的数量较少的场景。对于更复杂的对象创建和对象之间的依赖关系,可以考虑使用其他创建型设计模式,如工厂方法模式或抽象工厂模式。
作者:SamuelWu
链接:https://juejin.cn/post/7267091509953855543
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
链接:https://juejin.cn/post/7267091509953855543
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。