1、概念理解
定義乙個模板結構,將具體內容延遲到子類去實現。在不改變模板結構的前提下在子類中重新定義模板中的內容。
2、主要作用
1. 提高**復用性,將相同部分的**放在抽象的父類中,而將不同的**放入不同的子類中;
2. 提高了拓展性,將不同的**放入不同的子類中,通過對子類的擴充套件增加新的行為;
3. 實現了反向控制,通過乙個父類呼叫其子類的操作,通過對子類的具體實現擴充套件不同的行為,實現了反向控制,符合「開閉原則」。
3、應用場合
1. 一次性實現乙個演算法不變的部分,並將可變的行為留給子類來實現;
2. 各子類中公共的行為應被提取出來並集中到乙個公共父類中以避免**重複;
3. 需要控制子類的擴充套件。
例項:在炒素菜和葷菜的時候,兩道菜的炒菜步驟有的重複有的卻差別很大:
第一步:建立抽象模板類(abstract class)
package templatemethod;
/** * 建立抽象模板類(abstract class):炒菜的步驟
*/public
abstract
class
cook
//定義結構裡哪些方法是所有過程都是一樣的可復用的,哪些是需要子類進行實現的
//第一步:倒油是一樣的,所以直接實現
void pouroil()
//第二步:熱油是一樣的,所以直接實現
void heatoil()
//第三步:倒食材是不一樣的(乙個倒蔬菜,乙個是倒葷菜)
//所以宣告為抽象方法,具體由子類實現
abstract
void pourfood();
//第四步:倒調味料是不一樣的(乙個倒辣椒,乙個是倒孜然)
//所以宣告為抽象方法,具體由子類實現
abstract
void poursauce();
//第五步:翻炒是一樣的,所以直接實現
void fry()
}
第二步:建立具體模板類(concrete class)
炒葷菜:
package templatemethod;
/** * 建立具體模板類(concrete class),即炒菜的具體步驟
* 炒葷菜的具體步驟
*/public
class
meat
extends
cook
@override
public
void
poursauce()
}
炒素菜:
package templatemethod;
/** * 建立具體模板類(concrete class),即炒菜的具體步驟
* 炒素菜的具體步驟
*/public
class
vegetable
extends
cook
@override
public
void
poursauce()
}
第三步:建立執行類,開始執行
package templatemethod;
/** * 執行類,開始執行具體行為:炒菜
JAVA 設計模式之模板模式
模板模式 提供通用模板,高度抽象將通用演算法封裝,暴露子類物件特有演算法重寫。簡述直接上demo 通用模板類 package com.coamc.android.api.template version v 2.0.0 title bankte package com.coamc.android.a...
java設計模式之模板模式
模板模式是類的行為模式。準備乙個抽象類,將部分邏輯以具體方法以及具體建構函式的形式實現,然後宣告一些抽象方法來迫使子類實現剩餘的邏輯。不同的子類可以以不同的方式實現這些抽象方法,從而對剩餘的邏輯有不同的實現。這就是模板方法模式的用意。比如定義乙個操作中的演算法的骨架,將步驟延遲到子類中。模板方法使得...
Java設計模式之模板模式
從名字上看模板模式與元型模式有點像,但實際上它們有很大的不同。元型模式是建立系列中的模式,它的實現是先為類建立乙個例項,然後對這個例項進行初化,並當成是元型。以後再需要這個類的例項時,不再是從頭開始new,而是從已有的元型clone。當然,元型可能不只乙個,這個時候就要用集合類進行管理了,在clon...