模板方法模式:在一個方法中定義一個算法的骨架,而將一些步驟延遲到子類中。模板方法使得子類可以在不改變算法結構的情況下,重新定義算法中的某些步驟。
類圖:
我們把做菜分為洗菜,切菜,做菜,上菜四個步驟,我們用模板方法模式來實現做紅燒魚和做辣子雞丁。
類圖:
模板類Cook代碼實現:
public abstract class Cook { public void Cook(){ Wash(); Cut(); Cooking(); Dish(); } public void Wash(){ System.out.CookFish類代碼實現:public class CookFish extends Cook{ @Override public void Cut() { // TODO Auto-generated method stub System.out.println("在魚背上劃幾刀,方便入味"); } @Override public void Cooking() { // TODO Auto-generated method stub System.out.println("先煎至兩面金黃出鍋,后做湯汁,最后收汁出鍋"); } public void Wash(){ System.out.println("洗魚,去鱗"); }}CookChicken類代碼實現:
public class CookChicken extends Cook{ @Override public void Cut() { // TODO Auto-generated method stub System.out.println("用刀切成雞丁"); } @Override public void Cooking() { // TODO Auto-generated method stub System.out.println("加入蔥姜蒜辣子爆炒"); } public void Wash(){ System.out.println("洗雞"); }}Client類代碼實現:
public class Client { public static void main(String[] args){ CookFish cookFish = new CookFish(); CookChicken cookChicken = new CookChicken(); System.out.println("/n做一條紅燒魚..."); cookFish.Cook(); System.out.println("/n做一個辣子雞丁..."); cookChicken.Cook(); }}運行結果:
做一條紅燒魚...洗魚,去鱗在魚背上劃幾刀,方便入味先煎至兩面金黃出鍋,后做湯汁,最后收汁出鍋上菜做一個辣子雞丁...洗雞用刀切成雞丁加入蔥姜蒜辣子爆炒上菜總結: 模板方法定義了算法的步驟,把這些步驟的實現延遲到子類。 模板方法模式為我們提供了一種代碼復用的重要技巧。 模板方法的抽象類可以定義具體方法、抽象方法和鉤子。 抽象方法由子類實現。 鉤子是一種方法,它在抽象類中不做事,或者只做默認的事,子類可以選擇要不要去覆蓋它。 為了防止子類改變模板方法中的算法,可以將模板方法聲明為final。 策略模式和模板方法模式都封裝算法,一個用組合,一個用繼承。 工廠方法是模板方法的一種特殊版本。
新聞熱點
疑難解答