设计模式之(模板方法)
模板方法
若有不恰之处,请各位道友指正~
模板方法模式:在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法使子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤(以下是类图)。
public abstract class CaffeeineBeverage {
/**
* 这个方法就是模板方法
* 在这个模板中,算法内的每一个步骤都被一个方法代表
* 某些方法由这个类(超类)处理,有些则由子类处理
* 需要子类提供的方法,必须在超累中声明为抽象。
*/
final void prepareRecipe(){
boilWater();
brew();
pourCup();
addCondiments();
}
abstract void brew();
abstract void addCondiments();
void boilWater(){
System.out.println("boiling water");
}
void pourCup(){
System.out.println("pouring into cup ");
}
}
在模板方法里实现钩子
模板方法中钩子有很多用处,下面是其中一种在抽象方法中实现钩子,作为控制语句
final void prepareRecipe(){
boilWater();
brew();
pourCup();
if(customerWantsCondiments)
addCondiments();
}
boolean customerWantsCondiments(){
return ture; // 这是一种在判断语句中的钩子,默认不覆盖的话,返回ture
}
Arrays.sort 的方法源码就是使用了模板方法模式。