Java設計模式 - 模板方法模式
阿新 • • 發佈:2018-11-24
Java設計模式 - 模板方法模式
定義一個演算法的骨架,並將一些步驟通過子類表達。
UML圖示
要點
1. 定義一個演算法的骨架 - 建立一個抽象類
2. 將一些步驟通過子類表達 - 子類繼承抽象類 賦予不同實現
模板方法應用例項
模板方法適用於那種總體處理流程不變,但是處理細節可能存在變化的例項。
例如,咖啡店製作咖啡時大致可以抽象成如下幾個步驟:研磨咖啡豆 - 沖泡咖啡 - 加配料 - 加糖 - 拿給顧客。當顧客需要正常拿鐵時,會在沖泡好咖啡後,加入純牛奶。而另一個客戶需要豆奶拿鐵時,則會加入豆奶拿鐵。利用模板方法模式簡單模擬這一過程。
-CoffeeOrder.java
public abstract class CoffeeOrder { public void makingCoffee(){ GrindingCoffee(); BrewingCoffee(); AddIngredients(); AddSuger(); PassToCustormer(); } public abstract void GrindingCoffee(); public abstract void BrewingCoffee(); public abstract void AddIngredients(); public void AddSuger(){ System.out.println("Adding suger for a latte"); } public abstract void PassToCustormer(); }
- LatteCoffeeOrder.java
public class LatteCoffeeOrder extends CoffeeOrder { public void GrindingCoffee() { System.out.println("GrindingCoffee for a latte"); } public void BrewingCoffee() { System.out.println("BrewingCoffee for a latte"); } public void AddIngredients() { System.out.println("Add pure milk for a latte"); } public void PassToCustormer() { System.out.println("Passing a latte for custormer"); } }
-SoyLatteCoffeeOrder.java
public class SoyLatteCoffeeOrder extends CoffeeOrder {
public void GrindingCoffee() {
System.out.println("GrindingCoffee for a soy latte");
}
public void BrewingCoffee() {
System.out.println("BrewingCoffee for a soy latte");
}
public void AddIngredients() {
System.out.println("Add pure milk for a soy latte");
}
public void PassToCustormer() {
System.out.println("Passing a soy latte for custormer");
}
}
- Application.java
public class Application {
public static void main(String[] args){
CoffeeOrder order1;
CoffeeOrder order2;
order1 = new LatteCoffeeOrder();
order2 = new SoyLatteCoffeeOrder();
order1.makingCoffee();
order2.makingCoffee();
}
}
鉤子方法
抽象類中定義的具體方法,給出了空實現或者預設實現,並且允許子類重寫(沒用final)。有時候鉤子方法會作為flag來對當前程式體狀態進行判斷。