模板模式(Template Pattern)是一种行为型设计模式,它定义了一个算法的骨架,将一些步骤延迟到子类中实现。模板模式使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。
核心思想:
- 定义一个抽象类,其中包含算法的骨架,将算法中的某些步骤标记为抽象方法,留给子类实现。
- 子类继承抽象类,并实现其中的抽象方法,完成算法的具体实现。
- 抽象类中的模板方法调用了算法的各个步骤,由子类提供具体的步骤实现。
示例:
假设我们要实现一个简单的咖啡制作过程,其中有三个步骤:冲泡咖啡、加入调料、倒入杯中。其中冲泡咖啡和倒入杯中的步骤是固定的,但加入调料的种类可以由子类自由选择。
// 咖啡制作的模板类
abstract class CoffeeMakerTemplate {
// 模板方法,定义制作咖啡的算法骨架
public final void makeCoffee() {
brewCoffee();
addIngredients();
pourInCup();
}
// 冲泡咖啡,固定步骤
public void brewCoffee() {
System.out.println("冲泡咖啡");
}
// 加入调料,由子类实现的抽象方法
public abstract void addIngredients();
// 倒入杯中,固定步骤
public void pourInCup() {
System.out.println("倒入杯中");
}
}
// 子类1:制作黑咖啡
class BlackCoffeeMaker extends CoffeeMakerTemplate {
@Override
public void addIngredients() {
System.out.println("加入黑咖啡调料");
}
}
// 子类2:制作拿铁咖啡
class LatteCoffeeMaker extends CoffeeMakerTemplate {
@Override
public void addIngredients() {
System.out.println("加入牛奶和糖调料");
}
}
// 客户端代码
public class Client {
public static void main(String[] args) {
CoffeeMakerTemplate blackCoffee = new BlackCoffeeMaker();
CoffeeMakerTemplate latteCoffee = new LatteCoffeeMaker();
System.out.println("制作黑咖啡:");
blackCoffee.makeCoffee();
System.out.println("制作拿铁咖啡:");
latteCoffee.makeCoffee();
}
}