模板方法模式:在一個方法中定義一個算法的骨架,而將一些步驟延遲到子類中。模板方法使得子類可以在不改變算法結構的情況下,重新定義算法中的某些步驟。關於模板方法在我們生活中數不勝數,像我們做一些事情需要按照一定順序來執行,像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();
}
}