Java 模板方法模式(Template Method Pattern)詳解
🧠 什么是模板方法模式?
模板方法模式是一種行為型設計模式,在一個方法中定義一個操作中的算法骨架,而將一些步驟延遲到子類中。模板方法使得子類可以在不改變算法結構的情況下重新定義該算法的某些特定步驟。
🎯 使用場景
- 多個子類有相同的方法結構,但部分實現不同時
- 代碼中包含重復邏輯,想通過抽象類來提取通用部分
- 希望控制子類擴展的步驟和順序
🏗? 模式結構
- AbstractClass(抽象類):定義模板方法,聲明抽象的基本操作
- ConcreteClass(具體子類):實現基本操作,繼承模板方法的算法骨架
? 示例:制作飲品
抽象類(模板)
public abstract class Beverage {// 模板方法public final void prepareRecipe() {boilWater();brew();pourInCup();addCondiments();}void boilWater() {System.out.println("燒開水");}abstract void brew();void pourInCup() {System.out.println("倒入杯中");}abstract void addCondiments();
}
子類:制作茶
public class Tea extends Beverage {@Overridevoid brew() {System.out.println("用茶葉泡水");}@Overridevoid addCondiments() {System.out.println("加檸檬");}
}
子類:制作咖啡
public class Coffee extends Beverage {@Overridevoid brew() {System.out.println("用咖啡粉沖泡");}@Overridevoid addCondiments() {System.out.println("加糖和牛奶");}
}
客戶端調用
public class Client {public static void main(String[] args) {Beverage tea = new Tea();tea.prepareRecipe();System.out.println("——————");Beverage coffee = new Coffee();coffee.prepareRecipe();}
}
? 優點
- 封裝不變部分,提取公共代碼
- 行為由子類決定,符合開閉原則
- 提高代碼復用性
?? 缺點
- 每個不同實現都需要一個子類,類數目可能增多
- 子類可能因為重寫方法影響整體結構穩定性
🧩 使用建議
當多個子類有類似的邏輯結構時,可用模板方法模式提取共同結構,提升代碼的復用性和可維護性。