工厂方法
在基于类的编程中,工厂方法模式是一种创建模式,它使用工厂方法来处理创建对象的问题,而无需指定将要创建的对象的确切类。维基百科参考
protocol SenderProtocol
{
func send(package: AnyObject)
}
class Fedex: SenderProtocol
{
func send(package: AnyObject)
{
print("Fedex deliver")
}
}
class RegularPriorityMail: SenderProtocol
{
func send(package: AnyObject)
{
print("Regular Priority Mail deliver")
}
}
// This is our Factory
class DeliverFactory
{
// It will be responsable for returning the proper instance that will handle the task
static func makeSender(isLate isLate: Bool) -> SenderProtocol
{
return isLate ? Fedex() : RegularPriorityMail()
}
}
// Usage:
let package = ["Item 1", "Item 2"]
// Fedex class will handle the delivery
DeliverFactory.makeSender(isLate:true).send(package)
// Regular Priority Mail class will handle the delivery
DeliverFactory.makeSender(isLate:false).send(package)
通过这样做,我们不依赖于类的真实实现,使得 sender()
对于消费它的人完全透明。
在这种情况下,我们需要知道的是发送方将处理传递并公开名为 send()
的方法。还有其他几个优点:减少类耦合,更容易测试,更容易添加新行为,而无需更改谁正在使用它。
在面向对象的设计中,接口提供了抽象层,便于对代码进行概念性解释并创建阻止依赖性的屏障。维基百科参考