动机:有稳定的整体操作结构,但是子步骤是变化的;或者是框架和应用程序的结构(由于固有的结构(框架),无法和任务的整体结构同时实现(应用程序));
Template Method主要利用抽象方法给应用提供扩展点,并在方法中实现控制反转,被Template Method调用的抽象方法可以protected
在方法中需要知道需求中变化点和相对稳定的地方,将其区分开来,稳定的部分放入方法中,变化的部分做成抽象方法暴露给子类,让子类自己实现,这样实现了晚绑定
public class templateMethodTest{
protected void step2(){}
protected void step4(){}
private void step1{ ... }
private void step3{ ... }
private void step5{ ... }
public void run(){
step1();
step2();
step3();
step4();
step5();
}
}
public class test extends templateMethodTest{
@Override
protected void step2(){ ... }
@Override
protected void step4(){ ... }
public static void main(String[] args){
templateMethodTest tm=new test();
tm.run();
}
}
所谓的早绑定,就是将程序的主流程放在main方法中
从底层上来讲,早绑定就是主方法获取模板方法的指针,从而实现流程
而晚绑定其实是模板方法利用多态,获取了子方法的指针,由主方法调用从而实现流程,下面是早绑定实例
public class templateMethodTest{
public void step1{ ... }
public void step3{ ... }
public void step5{ ... }
}
public class test{
private void step2(){ ... }
private void step4(){ ... }
public static void main(String[] args){
templateMethodTest tm=new templateMethodTest();
tm.step1();
this.step2();
tm.step3();
this.step4();
tm.step5();
}
}