您好,登錄后才能下訂單哦!
本文小編為大家詳細介紹“Java設計模式之模板方法模式實例分析”,內容詳細,步驟清晰,細節處理妥當,希望這篇“Java設計模式之模板方法模式實例分析”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。
模板方法模式法(Template Method
)定義一個操作中的算法骨架,而將算法的一些步驟延遲到子類中,使得子類可以不改變該算法結構的情況下重定義該算法的某些特定步驟。
模板方法模式包含以下主要角色:
抽象類(Abstract Class
):負責給出一個算法的輪廓和骨架。它由一個模板方法和若干個基本方法構成。
抽象方法(Abstract Method
) :一個抽象方法由抽象類聲明、由其具 體子類實現。
具體方法(Concrete Method
) :一個具體方法由一個抽象類或具體類聲明并實現,其子類可以進行覆蓋也可以直接繼承。
鉤子方法(Hook Method
) :在抽象類中已經實現,包括用于判斷的邏輯方法和需要子類重寫的空方法兩種。一般鉤子方法是用于判斷的邏輯方法,這類方法名一般為isXxx,返回值類型為boolean類型。
模板方法:定義了算法的骨架,按某種順序調用其包含的基本方法。
基本方法:是實現算法各個步驟的方法。基本方法又可以分為三種:
具體子類(Concrete Class
):實現抽象類中所定義的抽象方法和鉤子方法,它們是一個頂級邏輯的組成步驟。
【案例】
炒菜的步驟是固定的,分為倒油、熱油、倒蔬菜、倒調料品、翻炒等步驟。但是可以倒入不同的蔬菜和不同的醬料。現通過模板方法模式來用代碼模擬
public class TemplateTest { public static void main(String[] args) { //炒包菜 BaoCai baoCai = new BaoCai(); baoCai.cookProcess(); System.out.println("-------------"); //炒白菜 BaiCai baiCai = new BaiCai(); baiCai.cookProcess(); } } abstract class AbstractClass{ //抽象類 //模板方法定義 public final void cookProcess() { this.pourOil();//倒油 this.heatOil();//熱油 this.pourVegetable();//倒蔬菜 this.pourSauce();//倒調味料 this.fry();//翻炒 } public abstract void pourVegetable();//倒蔬菜是不一樣的(一個下包菜,一個是下白菜) public abstract void pourSauce();//倒調味料是不一樣 public void pourOil() {System.out.println("倒油");} public void heatOil() {System.out.println("熱油");} public void fry(){System.out.println("炒啊炒");} } class BaoCai extends AbstractClass{ public void pourVegetable() {System.out.println("加入包菜");} public void pourSauce() {System.out.println("加入辣椒醬");} } class BaiCai extends AbstractClass{ public void pourVegetable() {System.out.println("加入白菜");} public void pourSauce() {System.out.println("加入鹽和味精");} }
【運行結果】
倒油
熱油
加入包菜
加入辣椒醬
炒啊炒
-------------
倒油
熱油
加入白菜
加入鹽和味精
炒啊炒Process finished with exit code 0
優點:
1、提高代碼復用性,將相同部分的代碼放在抽象的父類中,而將不同的代碼放入不同的子類中。
2、實現了反向控制,通過一個父類調用其子類的操作,通過對子類的具體實現擴展不同的行為,實現了反向控制 ,并符合“開閉原則”。
缺點:
1、對每個不同的實現都需要定義一個子類,這會導致類的個數增加,系統更加龐大,設計也更加抽象。
2、父類中的抽象方法由子類實現,子類執行的結果會影響父類的結果,這導致一種反向的控制結構,它提高了代碼閱讀的難度。
1、算法的整體步驟很固定,但其中個別部分易變時,這時候可以使用模板方法模式,將容易變的部分抽象出來,供子類實現。
2、需要通過子類來決定父類算法中某個步驟是否執行,實現子類對父類的反向控制。
讀到這里,這篇“Java設計模式之模板方法模式實例分析”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。