原理:在乙個方法中定義了乙個演算法的骨架或者步驟,而將一些步驟延遲到子類中去實現
模板方法可以使得子類在不改變演算法結構的情況下,重新定義演算法中某一些步驟
模板方法中的方法可以分為兩類:模板方法和基本方法(基本方法又可以分為抽象方法、具體方法、鉤子方法)
模板方法:乙個模板方法是定義在抽象類中的,把基本方法組合在一起形成乙個總算法或者總行為的方法
乙個抽象類中可以有多個模板方法,每乙個模板方法可以呼叫多個具體方法
模板方法一般設定成final,防止子類覆蓋該演算法的步驟
基本方法:
抽象方法:由子類具體的實現
具體方法:由抽象類宣告並實現,子類並不實現或者置換
鉤子方法:由抽象類宣告並實現,而子類會加以擴充套件
比如我們現在需要泡茶和泡咖啡
泡茶:將水煮沸-沸水煮茶-倒入杯中-判斷是否加東西 -如果加東西則執行加東西的方法(加檸檬)
泡咖啡:將水煮沸-沸水煮咖啡-倒入杯中-判斷是否加東西 -如果加東西則執行加東西的方法(加糖)
從這裡我們可以提取出模板方法就是:五個步驟
基本方法就是實現的具體
抽象方法:沸水煮茶和沸水煮咖啡 如果加東西則執行加東西的方法(加檸檬)和如果加東西則執行加東西的方法(加糖)是抽象方法由子類實現
具體方法:將水煮沸和倒入杯中
鉤子方法:判斷是否加入東西(這裡我們可以假設泡茶的時候加東西,泡咖啡不加東西)
抽象類
public abstract class dreammake
//抽象方法
abstract void brew();
abstract void addsomething();
//具體方法
private void boilwater()
//具體方法
private void pourincap()
//鉤子方法:預設是加東西的這裡要注意用public給子類用
public boolean isputsomething()
}
具體類(茶)
public class dreamtea extends dreammake
@override
void addsomething()
}
具體類(咖啡)
public class dreamcafe extends dreammake
@override
void addsomething()
public boolean isputsomething()
}
客戶端呼叫
public class main
}
執行結果
將水煮沸
沸水煮茶
倒入杯中
加檸檬將水煮沸
沸水煮咖啡
倒入杯中
總結:1.模板方法中把不變的行為搬移到超類中,減少子類**的重複
2.子類實現某些細節有利於演算法的擴充套件
3.策略模式和模板模式都是封裝演算法,前者使用組合委託模型,後者使用繼承
設計模式 9 設計模式
文章 head first 第一章 head first 設計模式讀書筆記 1 策略模式 觀察者模式 head first設計模式學習2 裝飾者模式 head first 設計模式3 工廠模式 head first設計模式4 命令模式 head first 設計模式5 介面卡模式和外觀模式 head...
模板設計模式 設計模式 模板方法模式
在模板模式 template pattern 中,乙個抽象類公開定義了執行它的方法的方式 模板。它的子類可以按需要重寫方法實現,但呼叫將以抽象類中定義的方式進行。這種型別的設計模式屬於行為型模式。首先需要一定抽象的定義,沒有具體的實現,但是在抽象類的行為中,子類去程序這個抽象類,重寫抽象方法,實現不...
模板設計模式 設計模式之模板模式
模板模式,通常又叫做模板方法模式,乙個抽象類公開定義了執行方法的模板,它的子類可以按需要重寫方法實現,但呼叫將以抽象類中定義的方法進行,這種型別的設計模式屬於行為型模式。模板模式主要解決將通用的演算法抽象起來,同樣的 邏輯出現了重複,就可以使用模板模式進行重構。關鍵 在抽象類實現,其他步驟在子類實現...