Java中的模板方法模式(Template Method Pattern)是一种行为设计模式,它定义了一个操作中的算法框架,将一些步骤延迟到子类中实现,以便子类可以在不改变算法框架的情况下重新定义算法的某些步骤。
下面是一个简单的例子,以咖啡和茶的制作为例:
//模板方法类
public abstract class CaffeineBeverage {
final void prepareRecipe() {
boilWater();
brew();
pourInCup();
addCondiments();
}
abstract void brew();
abstract void addCondiments();
void boilWater() {
System.out.println("Boiling water");
}
void pourInCup() {
System.out.println("Pouring into cup");
}
}
//具体模板类Coffee
public class Coffee extends CaffeineBeverage {
public void brew() {
System.out.println("Dripping Coffee through filter");
}
public void addCondiments() {
System.out.println("Adding Sugar and Milk");
}
}
//具体模板类Tea
public class Tea extends CaffeineBeverage {
public void brew() {
System.out.println("Steeping the tea");
}
public void addCondiments() {
System.out.println("Adding Lemon");
}
}
在上面的代码中,CaffeineBeverage 是一个抽象类,定义了一个模板方法 prepareRecipe(),该方法包含一系列步骤,这些步骤在制作咖啡和茶时都是一样的。但是,这个模板方法中的 brew() 和 addCondiments() 步骤是抽象的,因此子类需要实现它们以定义自己特定的咖啡或茶的制作步骤。在本例中,Coffee 和 Tea 是具体的子类,它们分别实现了 brew() 和 addCondiments() 方法,以定义它们自己特定的咖啡或茶的制作步骤。
当我们调用 prepareRecipe() 方法时,它会按照特定的步骤制作咖啡或茶,而不必关心具体是什么步骤。这种方式将具体实现细节委托给了子类,同时确保了整个算法框架的一致性。