行为型模式 - 模板方法模式 (Template Method Pattern)
模板方法模式定义了一个操作中的算法骨架,将一些步骤的实现延迟到子类中。使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。
假设有一个饮品制作流程,包括烧水、冲泡 / 酿造、倒入杯子、添加调料等步骤。不同的饮品(如咖啡和茶)在冲泡 / 酿造和添加调料这两个步骤可能有所不同,而烧水和倒入杯子步骤是通用的。可以使用模板方法模式来实现这个流程。
// 抽象类,定义饮品制作的模板方法
abstract class BeverageMaker {
// 模板方法,定义制作饮品的整体流程
public final void prepareBeverage() {
boilWater();
brew();
pourInCup();
addCondiments();
}
// 烧水,通用步骤
public void boilWater() {
System.out.println("烧水");
}
// 冲泡/酿造,具体实现由子类完成
public abstract void brew();
// 倒入杯子,通用步骤
public void pourInCup() {
System.out.println("倒入杯子");
}
// 添加调料,具体实现由子类完成
public abstract void addCondiments();
}
// 咖啡制作类,继承自 BeverageMaker
class CoffeeMaker extends BeverageMaker {
@Override
public void brew() {
System.out.println("冲泡咖啡粉");
}
@Override
public void addCondiments() {
System.out.println("添加糖和牛奶");
}
}
// 茶制作类,继承自 BeverageMaker
class TeaMaker extends BeverageMaker {
@Override
public void brew() {
System.out.println("浸泡茶叶");
}
@Override
public void addCondiments() {
System.out.println("添加柠檬");
}
}
// 客户端代码
public class BeverageExample {
public static void main(String[] args) {
BeverageMaker coffeeMaker = new CoffeeMaker();
coffeeMaker.prepareBeverage();
System.out.println();
BeverageMaker teaMaker = new TeaMaker();
teaMaker.prepareBeverage();
}
}