模板方法模式主要用于对算法或者行为逻辑进行封装,即如果多个类中存在某些相似的算法逻辑或者行为逻辑,可以将这些相似的逻辑提取到模板方法类实现,然后让相应的子类根据需要实现某些自定义的逻辑。
举个例子来说,所有汽车,不管是宝马还是夏利,它们的驾驶流程基本是固定的。实际上,除了少数细节不同,大部分的流程是一样的,基本上是如下所示的流程说明。
(1)点火启动汽车
(2)踩杀车,挂前进档位(手都挡和自动挡这一步存在差异)
(3)放下手刹
(4)踩油门启动车辆
我们可以声明一个模板方法类,将确定的行为以模板的形式定义,而将不同的行为留给相应的子类实现。
public abstract Vehicle {
public final void drive() {
startTheEngine ();
putIntoGear();
looseHandBrake();
setOnTheGasAndGo();
}
protected abstract void putIntoGear();
private void setOnTheGasAndGo(){
//...
}
private void putIntoGear(){
//...
}
}
driver()方法就是我们的模板方法,它声明为final,也就是说,方法内的逻辑是不可变更的。putIntoGear()由具体的子类实现。