模板模式学习笔记
什么是模板模式?
模板模式是一种基于继承的设计模式,它定义了一个算法骨架,并允许子类为一个或多个步骤提供实现。模板模式使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。
模板模式的组成部分
- 抽象类(Abstract Class):定义了算法骨架及其各个步骤的抽象方法。
- 具体类(Concrete Class):实现抽象类中的抽象方法,完成算法的具体步骤。
模板模式的优点
- 提高代码复用性,将公共代码放在抽象类中。
- 提高拓展性,允许子类重写某些步骤而不改变算法结构。
模板模式的实例
假设我们要编写一个制备咖啡的程序,该程序包含了制备美式咖啡和拿铁咖啡两种类型。我们可以使用模板模式来实现这个程序。
- 定义抽象类 Coffee,其中包含制备咖啡的算法骨架:
Copy Codepublic abstract class Coffee {
public final void prepareCoffee() {
boilWater();
brewCoffee();
pourIntoCup();
addCondiments();
}
public void boilWater() {
System.out.println("Boiling water...");
}
public abstract void brewCoffee();
public void pourIntoCup() {
System.out.println("Pouring coffee into cup...");
}
public abstract void addCondiments();
}
- 定义具体类 Americano,实现制备美式咖啡的具体步骤:
Copy Codepublic class Americano extends Coffee {
public void brewCoffee() {
System.out.println("Brewing Americano coffee...");
}
public void addCondiments() {
System.out.println("Adding sugar and cream...");
}
}
- 定义具体类 Latte,实现制备拿铁咖啡的具体步骤:
Copy Codepublic class Latte extends Coffee {
public void brewCoffee() {
System.out.println("Brewing espresso...");
}
public void addCondiments() {
System.out.println("Steaming milk and adding to espresso...");
}
}
- 在主函数中调用具体类的方法:
Copy Codepublic static void main(String[] args) {
Coffee americano = new Americano();
americano.prepareCoffee();
Coffee latte = new Latte();
latte.prepareCoffee();
}
输出结果如下:
Copy CodeBoiling water...
Brewing Americano coffee...
Pouring coffee into cup...
Adding sugar and cream...
Boiling water...
Brewing espresso...
Pouring coffee into cup...
Steaming milk and adding to espresso...
以上就是使用模板模式在制备咖啡程序中的一个实例,可以看到程序中抽象了制备咖啡的算法骨架,并在具体类中实现了具体的步骤。这样的设计使得程序更易于拓展,同时提高了代码复用性。