定義: 定義: 定義一個操作中的演算法的骨架,而將一些步驟延遲到子類中。模板方法使得子類可以不改變一個演算法的結構即可重定義該演算法的某些特定步驟。 結構:(書中圖,侵刪) 一個定義整體框架的父類 若幹不同具體實現的子類 實例: 我瞬間就想到了很多RPG游戲。 不同職業在新手村完成任務,最多就是打的怪名字 ...
定義:
定義一個操作中的演算法的骨架,而將一些步驟延遲到子類中。模板方法使得子類可以不改變一個演算法的結構即可重定義該演算法的某些特定步驟。結構:(書中圖,侵刪)
一個定義整體框架的父類 若幹不同具體實現的子類實例:
我瞬間就想到了很多RPG游戲。 不同職業在新手村完成任務,最多就是打的怪名字不一樣、不同職業獎勵的裝備不一樣子類的。 基本上都是一個套路。 接下來用代碼實現: 為了代碼簡潔,我就設置一個任務,以及兩個職業:戰士、法師。 新手村任務框架類:package designpattern.templatemethod; public abstract class NoviceVillage { public void Task1() { System.out.println("你好,勇士。請幫我殺掉10個" + Task1Aim()); } public void underWay() { System.out.println("任務進行中..."); } public void Task1Reward() { System.out.println("太好了,勇士!非常感謝,這是您的報酬:金幣*50、經驗*500、" + Task1RewardWeapon()); } abstract String Task1Aim(); abstract String Task1RewardWeapon(); }戰士的任務類:
package designpattern.templatemethod; public class NoviceVillageWarrior extends NoviceVillage{ @Override String Task1Aim() { return "老虎怪"; } @Override String Task1RewardWeapon() { return "新手巨劍*1"; } }法師的任務類:
package designpattern.templatemethod; public class NoviceVillageWizard extends NoviceVillage{ @Override String Task1Aim() { return "猴子精"; } @Override String Task1RewardWeapon() { return "新手法杖*1"; } }客戶端:
package designpattern.templatemethod; public class Client { public static void main(String[] args) { // 戰士 NoviceVillage noviceVillageWarrior = new NoviceVillageWarrior(); noviceVillageWarrior.Task1(); noviceVillageWarrior.underWay(); noviceVillageWarrior.Task1Reward(); System.out.println("=================================="); // 法師 NoviceVillage noviceVillageWizard = new NoviceVillageWizard(); noviceVillageWizard.Task1(); noviceVillageWizard.underWay(); noviceVillageWizard.Task1Reward(); } }
輸出結果:
你好,勇士。請幫我殺掉10個老虎怪 任務進行中... 太好了,勇士!非常感謝,這是您的報酬:金幣*50、經驗*500、新手巨劍*1 ================================== 你好,勇士。請幫我殺掉10個猴子精 任務進行中... 太好了,勇士!非常感謝,這是您的報酬:金幣*50、經驗*500、新手法杖*1