模板模式学习笔记

什么是模板模式?

模板模式是一种基于继承的设计模式,它定义了一个算法骨架,并允许子类为一个或多个步骤提供实现。模板模式使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。

模板模式的组成部分

  • 抽象类(Abstract Class):定义了算法骨架及其各个步骤的抽象方法。
  • 具体类(Concrete Class):实现抽象类中的抽象方法,完成算法的具体步骤。

模板模式的优点

  • 提高代码复用性,将公共代码放在抽象类中。
  • 提高拓展性,允许子类重写某些步骤而不改变算法结构。

模板模式的实例

假设我们要编写一个制备咖啡的程序,该程序包含了制备美式咖啡和拿铁咖啡两种类型。我们可以使用模板模式来实现这个程序。

  1. 定义抽象类 Coffee,其中包含制备咖啡的算法骨架:
Copy Code
public 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(); }
  1. 定义具体类 Americano,实现制备美式咖啡的具体步骤:
Copy Code
public class Americano extends Coffee { public void brewCoffee() { System.out.println("Brewing Americano coffee..."); } public void addCondiments() { System.out.println("Adding sugar and cream..."); } }
  1. 定义具体类 Latte,实现制备拿铁咖啡的具体步骤:
Copy Code
public class Latte extends Coffee { public void brewCoffee() { System.out.println("Brewing espresso..."); } public void addCondiments() { System.out.println("Steaming milk and adding to espresso..."); } }
  1. 在主函数中调用具体类的方法:
Copy Code
public static void main(String[] args) { Coffee americano = new Americano(); americano.prepareCoffee(); Coffee latte = new Latte(); latte.prepareCoffee(); }

输出结果如下:

Copy Code
Boiling 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...

以上就是使用模板模式在制备咖啡程序中的一个实例,可以看到程序中抽象了制备咖啡的算法骨架,并在具体类中实现了具体的步骤。这样的设计使得程序更易于拓展,同时提高了代码复用性。