Design Pattern|Template Method 範本方法模式

Betty Pan
Dec 29, 2022

--

定義:

一種只需要繼承就可以實作的非常簡單的模式,由兩個部份結構組成,第一部分是抽象父類別,第二部分是具體的實作子類別。

實作:

以收營員為例,收營員結帳 SOP 為 掃描物品 >> 將物品放入袋 >> 結帳
公司為了穩定所有收營員的服務品質,因此所有收營員必須遵從此框架。

  1. 使用 Protocol 定義父類別範本框架,創建收營員工作項目。
protocol CashierProtocol {
func scanItems()
func putItemsIntoBag()
func collectMoney()
func serveCustomer()
}

2. 使用 Protocol Extension 建立工作流程 SOP 。

extension CashierProtocol {
func serveCustomer() {
scanItems()
putItemsIntoBag()
collectMoney()
}
}

3. 具體實現子類別遵從父類別框架,子類別不能修改框架,但能修改每個步驟的具體實現。

class CostcoCashier: CashierProtocol {

func scanItems() {
print("scanItems")
}

func putItemsIntoBag() {
print("putItemsIntoBag")
}

func collectMoney() {
print("collectMoney")
}
}

let costcoCashier = CostcoCashier()
costcoCashier.serveCustomer()
//scanItems
//putItemsIntoBag
//collectMoney


class FamilyMartCashier: CashierProtocol {

func scanItems() {
print("scanItems")
}

func putItemsIntoBag() {
print("putItemsIntoBag")
}

func collectMoney() {
print("collectMoney")
}
}

let familyMartCashier = FamilyMartCashier()
familyMartCashier.serveCustomer()
//scanItems
//putItemsIntoBag
//collectMoney

--

--