模板模式:封装了一个算法步骤,并允许子类为一个或多个步骤方法提供实现,模板模式可以使子类在不改变算法结构的情况下,重新定义算法中的某些步骤。
模板模式封装的是步骤,他把各种方法之间的顺序关系封装起来放在一个方法中。
策略模式侧重只是把某一种方法或者功能把他解析化,把他变成一个方法族,针对某一个方法或行为进行封装解析化的。
策略模式是通过组合的方式来做,而模板模式是通过继承的方式来做的。
两种模式结合起来用,就需要把抽象方法用一个接口来代替。
public abstract class HotDrinkTemplate {
public final void prepareRecipe(){
boilWater();
brew();
pourInCup();
if(wantCondimentsHook()){
addCondiments();
}else{
System.out.println("No Condiments");
}
}
public boolean wantCondimentsHook(){
return true;
}
public final void boilWater(){
System.out.println("Boiling water");
}
public abstract void brew();
public final void pourInCup(){
System.out.println("Pouring into cup");
}
public abstract void addCondiments();
}
public class TeaWithHook extends HotDrinkTemplate{
@Override
public void brew() {
System.out.println("Brewing tea");
}
@Override
public void addCondiments() {
System.out.println("Adding lemon");
}
public boolean wantCondimentsHook(){
System.out.println("condiments,yes or no ?please input:");
BufferedReader in=new BufferedReader(new InputStreamReader(System.in));
String result="";
try{
result=in.readLine();
}catch(IOException e){
e.printStackTrace();
}
if(result.equals("n")){
return false;
}
return true;
}
}
public class MainTest {
public static void main(String[] args){
//HotDrink mCoffee=new Coffee();
TeaWithHook mTeaWithHook=new TeaWithHook();
mTeaWithHook.prepareRecipe();
}
}