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 {
@Override
void brew() {
System.out.println("用茶叶泡水");
}
@Override
void addCondiments() {
System.out.println("加柠檬");
}
}
子类:制作咖啡
public class Coffee extends Beverage {
@Override
void brew() {
System.out.println("用咖啡粉冲泡");
}
@Override
void 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();
}
}
✅ 优点
- 封装不变部分,提取公共代码
- 行为由子类决定,符合开闭原则
- 提高代码复用性
⚠️ 缺点
- 每个不同实现都需要一个子类,类数目可能增多
- 子类可能因为重写方法影响整体结构稳定性
🧩 使用建议
当多个子类有类似的逻辑结构时,可用模板方法模式提取共同结构,提升代码的复用性和可维护性。