參考地址:https://blog.csdn.net/u013393958/article/details/80231327
總結:
模板方法模式的實現要素:
1 抽象基類
(1)基本方法
例如:/*基本方法,將水煮沸*/
private void boilWater(){
System.out.println("將誰煮沸");
}
/*基本方法,將飲料倒入杯中*/
private void pourInCup(){
System.out.println("將飲料倒入杯中");
}
(2)抽象方法
例如:
/*抽象的基本方法,泡製飲料*/
protected abstract void brew();
(3)可選的鉤子
例如:/*
*Hook,鉤子函數,提供一個默認或空的實現,具體的子類可以自行決定是否掛鉤以及如何掛鉤
*詢問用戶是否加入調料
*/
protected boolean isCustomerWantsCondiments(){
return true;
}
(4)Template方法(final)
/*
*製備飲料的模板方法
*封裝了所有子類共同遵循的算法框架
*/
public final void prepareBeverageTemplate(){
//步驟1將水煮沸
boilWater();
//步驟2 泡製飲料
brew();
//步驟3 將飲料倒入杯中
pourInCup();
if(isCustomerWantsCondiments()){
//步驟4 加入調味料
addCondiments();
}
}
2 具體子類。
(1)實現基類中的抽象方法
(2)覆蓋鉤子方法
模板方法模式的實現要素
準備一個抽象類,將部分邏輯以具體方法的形式實現,然後聲明一些抽象方法交由子類實現剩餘邏輯,用鉤子方法給予子類更大的靈活性。最後將方法彙總構成一個不可改變的模板方法。
模板方法模式的適用場景
(1)算法或操作遵循相似的邏輯。
例如:
(2)重構時(把相同的代碼抽取到父類中)
(3)重要、複雜的算法那,核心算法設計爲模板算法
模板方法模式的優點
(1)封裝性好
(2)複用性好
(3)屏蔽細節
(4)便於維護
模板方法模式的缺點
繼承方面的