優勢:算法
① 定義了一個算法骨架或行爲族,而將一些步驟延遲到子類中,能夠把公共的代碼移到父類裏面,從而避免代碼重複。app
② 具體細節步驟實現定義在子類中,使得子類能夠不改變一個算法的總體結構便可以從新定義該算法的某些特定步驟。ui
缺點:spa
① 客戶端必須知道全部的策略類,並自行決定使用哪個策略類。code
② 因爲策略模式把每一個具體的策略實現都單獨封裝成爲類,若是備選的策略不少的話,那麼對象的數目就會很可觀。對象
適用範圍:blog
算法,折扣活動等接口
客戶端: it
DodishTemplate eggsWithTomato = new EggsWithTomato(); //西紅柿炒雞蛋
eggsWithTomato.doDish();
System.out.println("-----------------------------");
DodishTemplate bouilli = new Bouilli(); //紅燒肉
bouilli.doDish();模板
一句話歸納:定義一個操做的算法骨架,而將一些步驟延遲到子類中,模板方法使得子類能夠不改變一個算法的結構便可以從新定義該算法的某些特定步驟。
/** * DodishTemplate (作菜模板接口,備料、作菜和上菜方法,及總體過程的方法doDish()) * EggsWithTomato(西紅柿炒雞蛋) Bouilli(紅燒肉) -- 兩個實例,同一模板作出不一樣的菜 */