模板方法模式:在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。关于模板方法在我们生活中数不胜数,像我们做一些事情需要按照一定顺序来执行,像HeadFirst上的例子,星巴克冲泡咖啡的时候,先是把水煮沸,再是沸水冲泡咖啡,把咖啡倒进杯子,加糖喝牛奶,加其他东西(其他东西根据个人爱好可以加也可以不加)。
public abstract class CaffeineBeverage {
final void prepareRecipe(){
boilWater();
brew();
pourInCpu();
addCondments();
if (like()) {
addOthers();
}
}
abstract void brew();
abstract void addCondments();
void boilWater(){
System.out.println("Boiling water");
}
void pourInCpu(){
System.out.println("Pouring into cpu");
}
boolean like(){
return true;
}
void addOthers(){
System.out.println("Add Others");
}
}
public class Coffee extends CaffeineBeverage{
@Override
void brew() {
System.out.println("Dripping Coffee through filter");
}
@Override
void addCondments() {
System.out.println("Adding Suger and Milk");
}
}
public class Tea extends CaffeineBeverage{
@Override
void brew() {
System.out.println("Steeping the tea");
}
@Override
void addCondments() {
System.out.println("Adding lemon");
}
}
public class WaysTest {
public static void main(String[] args) {
Coffee coffee = new Coffee();
coffee.prepareRecipe();
Tea tea = new Tea(){
@Override
boolean like() {
return false;
}
};
tea.prepareRecipe();
}
}