模板方法模式:java
在一個方法中定義一個算法的骨架,而將一些步驟延遲到子類中。模版方法使子類在不改變算法結構的狀況下,從新定義算法中的某些步驟。算法
模板方法模式的結構:框架
這個模式是用來建立一個算法的模板。這個模板將算法定義爲一組步驟,其中任何步驟均可以是抽象的,由子類負責實現。不少框架都是採用模板方法模式。spa
示例:星巴茲沖泡咖啡和茶的步驟以下:code
咖啡沖泡法:繼承
|
茶沖泡法:ip
|
首先定義一個飲料的抽象類:ci
public abstract class Drink { //模板方法,定義製做飲料的模板過程 final void makeDrink() { boilWater(); //煮水 brew(); //沖泡 pourInCup(); //倒進杯子 if (customerWantsCondiments()) { addCondiments(); //加配料 } } //各類飲料的沖泡方法和加配料方法不一樣,定義爲抽象方法交給子類實現 abstract void brew(); abstract void addCondiments(); //各類飲料煮水和倒進杯子方法都同樣,直接在抽象超類中實現 void boilWater() { System.out.println("Boiling water");} void pourInCup() { System.out.println("Pouring into cup");} //該方法是一個鉤子,子類能夠覆蓋該鉤子來實現一些自定義功能 boolean customerWantsCondiments() { return true; } }
而後定義咖啡和茶類:鉤子
//茶類 public class Tea extends Drink{ public void brew(){ System.out.println("steeping the tea"); } public void addCondiments(){ System.out.println("adding lemon"); } } //咖啡類 public class Coffee extends Drink{ public void brew(){ System.out.println("dripping coffee through filter");} public void addCondiments(){ System.out.println("adding sugar and milk");} }
要點:table