[b]定義[/b]:在乙個方法中定義乙個演算法骨架,而將一些步驟延伸到子類中。(其本質:把可變和不可變進行分類。可變部分延伸到子類來完成,不變部分交給父類定義成骨架)
[b]優點[/b]:
1)可以使的子類可以在不改變演算法骨架的情況下,重新定義演算法中的某些步驟。
2)模版方法通過把不變的部分搬移到超類,去除了子類中的重複**。
3)子類實現演算法的特定步驟,有利於演算法的擴充套件。
4) 通過乙個父類呼叫子類實現的操作,通過子類擴充套件新的行為,符合「開放-封閉原則」。
[b]缺點:[/b]每乙個不同的實現都需要乙個子類來完成,這個會導致子類個數的增加,設計更抽象。
[b]使用場景[/b]:
1)在某些演算法中,有了相同的方法,造成的**重複。
2)控制子類擴充套件,子類必須遵守演算法規則。
場景:衝茶水: 衝咖啡:
1) 洗杯子 1)洗杯子
2) 燒開水 2)燒開水
3) 加料(加茶葉) 3)加料(加咖啡)
4) 燙材料(沸水燙茶葉)4)燙材料(溫水衝咖啡)
分析:[b]不變部分[/b]:衝咖啡和衝茶水的步驟是一樣的,抽象部分(不變部分:1洗杯子、2燒開水、3加料、4燙材料)
[b]可變部分[/b]:加料和燙料是可變部分。因此此部分需要交給子類擴充套件延伸,保證了**在骨架上的重用。
1、定義模版(沖水模版)
public abstract class flushwatertemple
public void wash()
public void boilwater()
//加料
public abstract void addmaterial();
//燙材料
public abstract void finshedwater();
}}
2、衝茶葉
public class flushtea extends flushwatertemple
//燙材料
public void finshedwater()
}
2、衝咖啡
public class flushcoffee extends flushwatertemple
//燙材料
public void finshedwater()
}
測試
public class test
}
設計模式 模版設計模式
模版設計模式的概念或者定義 定義乙個操作中演算法的框架,而將一些步驟延遲到子類中,使得子類可以不改變演算法的結構即可重定義該演算法中的某些特定步驟。以前雖然經常在專案中使用模版設計模式,特別在baseactivity,basefragement,basefragementactivity,basea...
js設計模式 模版設計模式
設計模式處處透漏者前輩們的指揮,在眾多設計模式中模版設計模式是軟體設計中最常用,最正統的模式,也是本人最喜歡的模式,其就像一顆顆螺絲釘處處體現在軟體設計和其他模式中 父類定義乙個模板結構,將部分具體內容延遲到子類去實現 在軟體系統設計中最常用的就是介面 抽象類 類 設計模式,如下圖 再此模式中介面定...
抽象類應用 模版設計模式
機械人 robot 具備充電 工作兩個基本操作 人類 human 具備吃飯 工作 睡覺三個基本操作 豬 pig 具備吃飯 睡覺兩個基本操作。定義的乙個行為類 abstract class action public abstract void eat 定義子類的操作標準 public abstrac...