Template Mode
2016-12-21 14:35:30 3 举报
模版模式
作者其他创作
大纲/内容
Tea
+Brew()+AddCondiments()+CustomWantsCondiments():bool
钩子,可以为空函数,由子类覆盖,要不要挂钩由类自行决定。
泡一杯咖啡,和泡一杯茶,有些步骤是相似的
Generalization
Coffee
将PrepareRecipe()抽象化void PrepareRecipe(){ BoilWater(); Brew(); PourInCup(); AddCondiments();}
+ PrepareRecipe()+BoilWater()+SteepTeaBag()+PourInCup()+AddLemon()
run:Tea tea = new Tea()tea.PrepareRecipe();Coffee coffee = new Coffee();coffee.PrepareRecipe();
+ PrepareRecipe()+BoilWater()+BrewCoffeeGrinds()+PourInCup()+AddSugarAndMilk()
模板方法 : 定义了一个算法的步骤,并允许子类在不改变算法结构的情况下,重新定义算法中的某些步骤,为一个或多个步骤提供实现。
带钩子的算法结构:void PrepareRecipe(){ BoilWater(); Brew(); PourInCup(); if(CustomWantsCondiments()) { AddCondiments(); }}
(abstract class)CaffeineBeverage
+PrepareRecipe() final+BoilWater()+Brew() abstract+PourInCup()+AddCondiments() abstract+CustomWantsCondiments():bool
0 条评论
回复 删除
下一页