在了解模板方法模式之前,先看下例子,容易理解:
1, 咖啡冲泡法:
1) 把水煮沸
2) 用沸水冲泡咖啡
3) 把咖啡倒进杯子
4) 加糖和牛奶
2, 茶冲泡法:
1) 把水煮沸
2) 用沸水浸泡茶叶
3) 把茶倒进杯子
4) 加柠檬
以上两种方法,1,3都是同样的操作方法,2,4不一样;所以可以设计一个抽象的父类,在方法prepare()中1,3先实现,然后留着2,4等着给子类实现;这就是模板方法。
定义:
模板方法模式:在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法的结构的情况下,重新定义算法中的某些步骤。
类图如下所示:
代码:
abstract class Beverage{
public final void prepare(){
boilWater();
brew();
pourInCup();
addCondiments();
}
public abstract void brew();
public abstract void addCondiments();
public void boilWater(){
System.out.println("boiling water");
}
public void pourInCup(){
System.out.println("pouring into cup");
}
}
class Tea extends Beverage{
public void brew(){
System.out.println("steeping the tea");
}
@Override
public void addCondiments() {
// TODO Auto-generated method stub
System.out.println("Adding Lemon");
}
}
class coffee extends Beverage{
public void brew(){
System.out.println("Dripping the tea");
}
@Override
public void addCondiments() {
// TODO Auto-generated method stub
System.out.println("Adding sugar and milk");
}
}