定义:定义一个操作中算法的框架,而将一些步骤延迟到子类中,使得子类可以不改变算法的结构即可重定义该算法中的某些特定步骤。
类型:行为类模式
模版方法模式的结构
模版方法模式由一个抽象类和一个(或一组)实现类通过继承结构组成,抽象类中的方法分为三种:
- 模版方法:由抽象类声明并加以实现。(final)
public final void prepareTempate(){
//步骤一:将水煮沸
boilWater();
//步骤二:泡制饮料
brew();
//步骤三:将饮料倒入杯中
pourInCup();
//步骤四:加入调味料
addCondiments();
}
private void boilWater(){
//煮水处理
}
private void pourInCup(){
//倒入杯中
}
2.抽象方法:父类中只声明但不加以实现,而是定义好规范,然后由它的子类去实现。
protected abstract void brew();
protected abstract void addCondiments();
3.钩子方法:由抽象类声明并加以实现。但是子类可以去扩展,子类可以通过扩展钩子方法来影响模版方法的逻辑。
//钩子函数,提供一个默认或空的实现
if(isCustomerWant()){
addCondiments();
}
//子类可以看到它
protected boolean isCustomerWant(){
return true;
}
总结:在多个子类拥有相同的方法,并且这些方法逻辑相同时,可以考虑使用模版方法模式。在程序的主框架相同,细节不同的场合下,也比较适合使用这种模式。