模板模式便是通过定义一个模板(结构、框架、原型),在之后的工作便是对其进行充实、完善实际所需。
模板采用抽象类来定义,公共的结构化逻辑需要在抽象基类中定义,只将非公共类的部分逻辑抽象成方法,留在子类充实实现。
用生活中的两个例子来说:泡茶和煮咖啡。
泡茶步骤:1.将水煮沸 2.浸泡茶包 3.将茶倒入杯中 4.加柠檬
煮咖啡步骤:1.将水煮沸 2.冲泡咖啡 3.将咖啡倒入杯中 4.加糖和牛奶
从上面步骤可以看出无论是泡茶还是煮咖啡过程都是大致相似的,甚至1、2步骤是完全相同的,而3、4步骤只是冲泡和加入的调料有所不同,所以根据模板模式的定义,将1、2相同的这两部分放在超类中,可以被两个子类所共用,将步骤3、4声明为抽象方法,留给子类充实。回过头来我们仔细想想既然整个过程大致相似,只是放入的原料以及加入的辅料不同,则我们亦可以将整个过程抽象化。
其类图如下:
代码如下:
实现抽象基类,为所有子类提供模板
import java.util.Scanner;
abstract class CaffeineBeverage{