模板方法模式其实就是将相似步骤的类抽取相同的部分到抽象类中,不同部分在抽象类中定义为抽象方法,让具体类去实现。
以泡茶和泡咖啡作为例子。他们都需要煮水,泡茶或咖啡,过滤,加柠檬或糖
1.抽象出来的类
//把相同的煮水和过滤抽出来,至于泡的是茶还是咖啡,加的是柠檬还是糖则泛化为抽象
public abstract class CaffeineBeverage {
final void prepareRecipe(){
boilWater();
brew();
pourInCup();
addCondiments();
}
abstract void addCondiments();
void pourInCup() {
// TODO Auto-generated method stub
System.out.println("Pouring in cup");
}
abstract void brew();
private void boilWater() {
// TODO Auto-generated method stub
System.out.println("Boiling water");
}
}
2.具体实现的类
public class Coffee extends CaffeineBeverage {
@Override
void addCondiments() {
// TODO Auto-generated method stub
System.out.println("Adding sugar and milk");
}
@Override
void brew() {
// TODO Auto-generated method stub
System.out.println("dripping coffee through filter");
}
}
public class Tea extends CaffeineBeverage{
@Override
void addCondiments() {
// TODO Auto-generated method stub
System.out.println("Adding Lemon");
}
@Override
void brew() {
// TODO Auto-generated method stub
System.out.println("Steeping the tea");
}
}