工廠方法

在基於類的程式設計中,工廠方法模式是一種建立模式,它使用工廠方法來處理建立物件的問題,而無需指定將要建立的物件的確切類。維基百科參考

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() 的方法。還有其他幾個優點:減少類耦合,更容易測試,更容易新增新行為,而無需更改誰正在使用它。

在物件導向的設計中,介面提供了抽象層,便於對程式碼進行概念性解釋並建立阻止依賴性的屏障。維基百科參考