首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

設計模式精講:模板方法模式——定義算法骨架,延遲具體步驟到子類

     編輯:Java 相關知識

模板方法模式在父類定義算法骨架,將可變步驟延遲到子類實現,實現「好萊塢原則:別調用我們,我們會調用你」。它是代碼復用與擴展的基石,廣泛應用於框架設計。

一、 三類方法與角色分工

  • 抽象方法:父類聲明、子類必須實現,核心變化點。
  • 模板方法:父類實現、定義 final,調用抽象方法組裝骨架,禁止覆蓋。
  • 鉤子方法:父類提供默認實現、子類可選擇覆蓋,控制流程走向。

抽象類:由架構師/資深工程師編寫,決定系統穩定性。
實現類:由初/中級工程師填充細節,單元測試通過即保證整體正確。

二、 經典案例:排序框架

abstract class AbstractSort {
    protected abstract void sort(int[] arr); // 抽象方法
    public final void showSortResult(int[] arr) { // 模板方法
        sort(arr);
        printArray(arr);
    }
    protected void printArray(int[] arr) { // 鉤子方法,可覆蓋
        System.out.print("排序結果:");
        for (int n : arr) System.out.printf("%3d", n);
        System.out.println();
    }
}

class QuickSort extends AbstractSort {
    protected void sort(int[] arr) { /* 快排實現 */ }
}

class BubbleSort extends AbstractSort {
    protected void sort(int[] arr) { /* 冒泡實現 */ }
}

三、 優缺點與「反向控制」風險

優點缺點/風險
復用不變邏輯,隔離變化點子類影響父類行為,違反里氏替換原則
易於擴展新算法,符合開閉原則層次過深導致「面條式代碼」,難以閱讀
控制反轉,框架掌握主動權抽象方法過多增加子類實現負擔

四、 適用場景與最佳實踐

  • 多子類共享相同算法骨架,僅關鍵步驟不同(數據導入/導出、測試框架、構建流程)。
  • 實踐建議:抽象方法盡量少、粒度粗;鉤子方法命名以 hook 或 do 開頭;關鍵模板方法加 final;結合工廠模式實例化具體子類。

五、 總結

模板方法模式是繼承的正統用法:父類定義「什麼時候做什麼」,子類定義「具體怎麼做」。它將架構師的設計意圖固化為代碼骨架,指導團隊在規範框架內高效協作,是框架級代碼的標配模式。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved