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

Java 模板方法模式深度解析:框架搭建與細節擴展的藝術

     編輯:Java 相關知識

模式定義

模板方法模式:在抽象類中定義算法骨架,將具體步驟延遲到子類實現。子類不改變算法結構即可重定義特定步驟。

核心角色

  • AbstractClass(抽象類):定義抽象基本方法、模板方法、鉤子方法
  • ConcreteClass(具體類):實現抽象基本方法,可選擇性覆寫鉤子方法

三類方法詳解

方法類型定義者實現者特點
基本方法抽象類聲明子類實現算法步驟細節,protected 封裝
模板方法抽象類聲明並實現抽象類算法框架,調用基本方法,**通常 final 禁止覆寫**
鉤子方法抽象類聲明並默認實現子類可選擇覆寫影響流程控制(如 isNeedSort()),默認空實現

經典案例:排序框架

抽象類:定義「排序+打印」框架

public abstract class AbstractSort {
    // 基本方法:由子類實現具體排序算法
    protected abstract void sort(int[] array);
    
    // 模板方法:final 固化流程
    public final void showSortResult(int[] array) {
        this.sort(array);              // 步驟1:排序(延遲到子類)
        System.out.print("排序結果:"); // 步驟2:打印(固化邏輯)
        for (int v : array) System.out.printf("%3s", v);
    }
}

具體類:實現選擇排序

public class ConcreteSort extends AbstractSort {
    @Override protected void sort(int[] array) {
        for (int i = 0; i < array.length - 1; i++) selectSort(array, i);
    }
    private void selectSort(int[] array, int index) {
        // 選擇排序具體實現...
    }
}

客戶端調用

AbstractSort s = new ConcreteSort();
s.showSortResult(new int[]{10, 32, 1, 9, 5, 7, 12, 0, 4, 3});
// 輸出:0 1 3 4 5 7 9 10 12 32

模式優勢

  1. 封裝不變,擴展可變:核心流程穩定,細節靈活替換
  2. 提取公共代碼:減少重複,便於維護
  3. 控制反轉:父類調用子類實現(「好萊塢原則」)

適用場景

  • 多子類共享邏輯骨架,細節不同(如數據導出:CSV/Excel/PDF)
  • 複雜算法核心固定,邊界條件可變
  • 重構時提取公共流程

擴展技巧

  • 基本方法用 protected 封裝,對外不可見
  • 善用鉤子方法控制流程分支(如 if (hook()) doSomething())
  • 模板方法加 final 防止子類破壞流程

總結

模板方法模式是框架設計的基石:父類搭台唱戲(定流程),子類進場表演(填細節)。Spring JdbcTemplate、HttpServlet、集合類 Collections.sort() 皆是經典應用。掌握「什麼變、什麼不變」的邊界劃分,是駕馭此模式的關鍵。

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