1.模板方法定义
模板方法模式是一种行为型设计模式,它定义了一个操作中的算法骨架,将一些步骤延迟到子类中实现。在模板方法模式中,父类定义了一个模板方法,该方法包含了多个子步骤,其中有些步骤可以由子类自行实现。
通过使用模板方法模式,可以有效地避免代码重复,并且使得程序更加灵活和易于维护
2.以制作咖啡和茶为例来说明模板方法模式的使用和业务场景:
public abstract class CaffeineBeverage {
public final void prepareRecipe() {
boilWater();
brew();
pourInCup();
addCondiments();
}
public void boilWater() {
System.out.println("Boiling water");
}
public abstract void brew();
public void pourInCup() {
System.out.println("Pouring into cup");
}
public abstract void addCondiments();
}
public class Coffee extends CaffeineBeverage {
@Override
public void brew() {
System.out.println("Dripping coffee through filter");
}
@Override
public void addCondiments() {
System.out.println("Adding sugar and milk");
}
}
public class Tea extends CaffeineBeverage {
@Override
public void brew() {
System.out.println("Steeping the tea");
}
@Override
public void addCondiments() {
System.out.println("Adding lemon");
}
}
在上述代码中,我们首先定义了一个名为 CaffeineBeverage 的抽象类,并且定义了一个名为 prepareRecipe() 的模板方法。该方法包含了多个子步骤:烧水、冲泡、倒入杯中、添加调料等。其中烧水和倒入杯中这两个步骤是相同的,因此我们在父类中实现它们;而冲泡和添加调料这两个步骤则是不同的,因此我们将其定义为抽象方法,在具体子类中实现。
然后我们分别创建了两个具体子类 Coffee 和 Tea,并且分别实现了相应的冲泡和添加调料方法。
最后,在客户端中创建不同类型的咖啡或茶对象,并且调用其 prepareRecipe() 方法即可完成制作过程。例如:
// 客户端代码
CaffeineBeverage coffee = new Coffee();
coffee.prepareRecipe();
CaffeineBeverage tea = new Tea();
tea.prepareRecipe();
在上述代码中,我们首先创建两个不同类型的咖啡或茶对象,并且调用其 prepareRecipe() 方法即可完成制作过程。通过使用模板方法模式,在这个例子中可以方便地组织复杂的业务流程,并且使得程序更加灵活和易于维护。