模板方法模式

看下面一个例子,星巴兹的冲咖啡和泡茶
星巴兹咖啡冲泡法 1 把水煮沸 2把沸水冲泡咖啡 3把咖啡倒进杯子 4 加糖和牛奶
星巴兹茶冲泡法   1 把水煮沸 2用沸水浸泡茶叶 3把茶叶倒进杯子 4 加柠檬
注意两份冲泡法都采用了相同的算法
1 把水煮沸 2用热水泡咖啡或茶 3把饮料倒入杯子 4在杯子中加入适当的调料;
所以我们可以使用模板设计模式
public abstract class CaffeineBeverage{
 void final preparedRecipe(){
  boilWater();
  brew();
  pourIncup();
  addCondiments();
 }
 abstract void brew();
 abstract void addCondiments();
 void boilWater(){
  //具体实现 烧水
 }
 void popurIncup(){
  //具体实现 热水倒入杯子
 }

}
下面以茶为例:
public class Tea extends CaffeineBeverage{

 public void brew{
  //具体实现
 }
 public void addCondiments(){
  //具体实现
 }

 //测试
 public static void main(String args[]){
  Tea tea = new Tea();
  tea.preparedRecipe();
 }
}
模板方法模式:在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。
1.模板方法定义了算法的步骤,把这些步骤的实现延迟到子类中。
2.模板方法模式为我们提供了一种代码复用的重要技术。
3.模板方法模式的抽象类还可以定义具体的方法,抽象方法和钩子。
4.抽象方法可以由子类实现。
5.钩子是一种方法,它在抽象类中不做事,或者只做默认的事情,子类可以选择要不要覆盖它。
6.为防止子类改变模板方法中的算法,可以将模板方法声明为final
7.策略模式和模板方法模式都封装算法,一个用组合,一个用继承。
8.工厂方法是模板方法的一种特殊版本。

posted @ 2014-04-21 21:27  942391815  阅读(177)  评论(0编辑  收藏  举报