小A:“師兄,能給我講講模板方法模式的結構嗎?”
大B:“在模板方法模式中有兩個參與者進行協作。”
小A:“哪兩種參與者?”
大B:“抽象模板類和具體類。”
小A:“什麼是抽象模板類?”
大B:“定義一個或多個抽象操作,由子類去實現。這些操作稱為基本操作。定義並實現一個具體操作,這個具體操作透過呼叫基本操作給確定頂級邏輯。這個具體操作稱為模板方法。”
小A:“什麼是具體類啊?”
大B:“實現抽象模板類所定義的抽象操作。如上面的訂單處理所示:AbstractOrder就是抽象模板類,placeOrder即是抽象模板方法。GetOrderItemPrice,getSpendingLimit和saveOrder三個抽象方法為基本操作。具體子類能按需要去實現這三個抽象方法。不同的子類可能有著不同的實現方式。”
程式碼:
PublicclassConcreteOrderextendsAbstractOrder{
publicintgetOrderItemPrice(OrderItemorderItem){
//計算貨物的售價
……
}
publicintgetSpendingLimit(intcustomerId){
//讀取客戶的信用額度
……
}
publicintsaveOrder(intcustomerId,inttotal,ListorderItemList){
//寫入資料庫
……
}
}
大B:“rendercode();ConcreteOrder為AbstractOrder的具體子類,ConcreteOrder需要去完成具體的三個基本操作。同時它也具有了父類一樣的處理邏輯。把具體的實現延遲到了子類去實現,這就是模板方法模式所帶來的好處。”