概念理解
在模板模式中,抽象类定义了做一件事情的步骤,步骤中相同的实现方式放在抽象类中,个性化的实现放在子类中。模板模式是一种行为型模式。总的来说,模板模式就是超类做流程,子类做细节。
模板模式的结构
考虑制作鲜榨果汁的例子,鲜榨果汁统一的步骤是准备水果,榨汁,过滤,包装。其中根据果汁种类的不同,准备的水果不同,榨汁,过滤,包装都是一样的,子类仅需要实现准备水果的步骤就可以了。

代码实例
public abstract class Juice {
public final void makeJuice(){
prepare();
press();
filter();
pack();
}
private void press() {
System.out.println("fruit is pressed");
}
private void pack() {
System.out.println("juice is packed");
}
private void filter() {
System.out.println("juice is filtered");
}
protected abstract void prepare();
}
public class AppleJuice extends Juice {
@Override
protected void prepare() {
System.out.println("apple is prepared");
}
}
public class OrangeJuice extends Juice {
@Override
protected void prepare() {
System.out.println("organge is prepare");
}
}
好莱坞原则
好莱坞原则是不要打电话给我们,有事我们会打电话给你。这是高层(抽象类)和低层(具体实现类)之间的关系。高层关注的是流程,高层能调用低层,低层不能调用高层。模板模式很好的体现了这个原则。
总结
优点:模板模式封装了不变的部分,扩展了可变的部分,便于维护
注意点:为了防止被恶意覆盖,抽象类中的模板方法需要加上final关键字。
代码实例参见https://github.com/jxl198/designPattern/tree/master/template
网友评论