模板方法模式是一種非常簡單實用的模式,本文對模板方法模式進行了簡單的介紹,對意圖,結構等進行了描述,並且給出了Java的示例代碼,模板方法模式是對面向對象程式設計繼承的一個很優秀的使用,想一下Thread的start和run方法,再想想模板方法模式的含義,你是否會想到什麼? ...
模板方法模式 Template method



意圖
定義一個操作中的演算法的骨架,而將一些步驟延時到子類中。 TemplateMethod使得子類可以不改變一個演算法的結構即可重新定義演算法的某些特定步驟。結構

代碼示例
定義做菜步驟:買菜,洗菜,切菜,做菜。 買菜、洗菜、切菜都一樣,做菜不同菜不同做法 上菜將他們步驟進行打包package template; public abstract class 做菜 { public void 買菜(){ System.out.println("買菜..."); } public void 洗菜(){ System.out.println("洗菜..."); } public void 切菜(){ System.out.println("切菜..."); } public abstract void 做菜(); public void 上菜(){ 買菜(); 洗菜(); 切菜(); 做菜(); System.out.println("客官,菜來了~~~"); } }做回鍋肉和做大頭菜都重寫了“做菜”的方法
package template; public class 做回鍋肉 extends 做菜 { @Override public void 做菜() { System.out.println("做回鍋肉..."); } }
package template; public class 做大頭菜 extends 做菜 { @Override public void 做菜() { System.out.println("做大頭菜..."); } }
測試代碼

方法分類
通常模板模式中會涉及到兩類方法,模板方法和基本方法; 模板方法指的是定義在抽象類中,把基本方法組合在一起形成複雜邏輯的方法,通常子類是不修改這個方法的 模板方法給出來頂層的邏輯框架。 比如上面的“上菜”,上菜方法調用了“買菜,洗菜,切菜,做菜” 可以有任意多個的模板方法 另一類就是基本方法了,基本方法就是複雜方法的組成部分 基本方法又有幾種形式 抽象方法,具體方法,鉤子方法 抽象方法:abstract定義,子類實現 具體方法:抽象類具體實現 鉤子方法:抽象類提供預設實現的方法,經常是一個空實現,好處是子類不是必須實現 前面說到,模板方法定義了頂層的框架邏輯,而且子類一般不修改,直接繼承。 可以通過鉤子方法對頂層框架邏輯進行微調 比如上面做菜的示例中,上菜的環節中,新增加一個方法用來判斷是否需要切菜

