【正文】
arAndMilk()。 } public void boilWater() {...} public void brewCoffeGrinds(){...} public void pourInCup(){...} public void addSugarAndMilk(){...} } Co f f e+ p r e p a r e R e c ip e ( )+ b o ilW a te r ( )+ b r e w Co f f e Gr in d s ( )+ p o u r I n Cu p ( )+ a d d S u g a r An d M ilk ( )53 茶類 public class Tea{ void prepareRecipe(){ boilWater()。 steepTeaBag()。 pourInCup()。 addLemon()。 } public void boilWater() {...} public void steepTeaBag(){...} public void pourInCup(){...} public void addLemon(){...} } T e a+ p r e p a r e R e c ip e ( )+ b o ilW a te r ( )+ s te e p T e a B a g ( )+ p o u r I n Cu p ( )+ a d d L e m o n ( )54 咖啡和茶類的問題 T e a+ p r e p a r e R e c ip e ( )+ b o ilW a te r ( )+ s te e p T e a B a g ( )+ p o u r I n Cu p ( )+ a d d L e m o n ( )Co f f e+ p r e p a r e R e c ip e ( )+ b o ilW a te r ( )+ b r e w Co f f e Gr in d s ( )+ p o u r I n Cu p ( )+ a d d S u g a r An d M ilk ( )?兩個類含有重復(fù)代碼 ? 應(yīng)該將共同的部分抽取出來,放入基類中 55 ?問題 ? 相同或類似的沖泡法算法能否抽象出來? 抽取基類 Co f f e+ p r e p a r e R e c ip e ( )+ b r e w Co f f e Gr in d s ( )+ a d d S u g a r An d M ilk ( )T e a+ p r e p a r e R e c ip e ( )+ s te e p T e a B a g ( )+ a d d L e m o n ( )Caf f e i n B e v e r ag e+ p r e p a r e R e c ip e ( )+ b o ilW a te r ( )+ p o u r I n Cu p ( )56 抽象 prepareRecipe void prepareRecipe(){ boilWater()。 brewCoffeGrinds()。 pourInCup()。 addSugarAndMilk()。 } void prepareRecipe(){ boilWater()。 steepTeaBag()。 pourInCup()。 addLemon()。 } 咖啡 茶 void prepareRecipe(){ boilWater()。 brew()。 pourInCup()。 addCondiments()。 } 57 抽象基類 public abstract class CaffeineBeverage{ final void prepareRecipe(){ boilWater()。 brew()。 pourInCup()。 addCondiments()。 } abstract void brew()。 abstract void addCondiments()。 void boilWater() {...} void pourInCup() {...} } Caf f e in B e v e r ag e+ p r e p a r e R e c ip e ( )+ b o ilW a te r ( )+ p o u r I n Cu p ( )+ b r e w ( )+ a d d Co n d im e n ts ( )58 ?算法模板 ? 在基類中定義算法模板步驟 ? 在派生類中重新定義算法中的某些步驟 處理派生類 Co f f e+ b r e w ( )+ a d d Co n d im e n ts ( )T e a+ b r e w ( )+ a d d Co n d im e n ts ( )Caf f e i n B e v e r ag e+ p r e p a r e R e c ip e ( )+ b o ilW a te r ( )+ p o u r I n Cu p ( )+ b r e w ( )+ a d d Co n d im e n ts ( )59 模板方法模式的定義 ?模板方法模式 Template Method Pattern:在一個方法中定義一個算法的骨架,而將一些步驟延遲到子類中實現(xiàn)。模板方法模式使得子類可以在不改變算法結(jié)構(gòu)的情冴下,重新定義算法中的某些步驟 ? 通常在基類中定義算法的骨架,以及通用的處理步驟 ? 在子類中實現(xiàn)抽象的部分步驟