工厂方法

在基于类的编程中,工厂方法模式是一种创建模式,它使用工厂方法来处理创建对象的问题,而无需指定将要创建的对象的确切类。维基百科参考

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() 的方法。还有其他几个优点:减少类耦合,更容易测试,更容易添加新行为,而无需更改谁正在使用它。

在面向对象的设计中,接口提供了抽象层,便于对代码进行概念性解释并创建阻止依赖性的屏障。维基百科参考