模板方法模式是类的行为模式。
准备一个抽象类,将部分逻辑以具体方法以及具体构造函数的形式实现,
然后声明一些抽象方法迫使子类实现剩余的逻辑。不同的子类可以以不同的方式实现这些抽象方法,
从而对剩余的逻辑有不同的实现。这就是模板方法的用意。
这里涉及两个角色:
抽象模板角色(Abstract Template)由如下责任:
具体模板角色(Concrete Template)的责任:
源代码:
抽象模板类
public abstract class AbstractClass {
public void TemplateMethod(){
//调用基本方法(由子类实现)
doOperation1();
doOperation2();
doOperation3();
}
//基本方法的声明
protected abstract void doOperation1();
protected abstract void doOperation2();
private final void doOperation3(){
//do something
}
}
具体模板类
public class ConcreteClass extends AbstractClass {
@Override
protected void doOperation1() {
// TODO Auto-generated method stub
System.out.println("doOperation1");
}
@Override
protected void doOperation2() {
// TODO Auto-generated method stub
System.out.println("doOperation2");
}
}
这个具体类实现了 父类声明的基本方法 - doOperation1()和doOperation2() ,而这两个基本方法所代表的就是强制子类实现的剩余逻辑。
好莱坞原则体现了模板模式的关键:
子类可以置换掉父类的可变部分,但是子类却不可以改变模板方法所代表的顶级逻辑。