定义
定义一个算法中的操作框架,而将一些步骤延迟到子类中。使得子类可以不改变算法结构即可重定义该算法的某些特定步骤。
角色
该设计模式的角色划分较为简单
- 抽象模版类
- 具体模版类
抽象模版类又包含了这样几个方法:模版方法,具体方法,抽象方法,勾子方法。
- 模版方法
决定了算法的实现步骤,该方法中调用了具体方法,待实现的抽象方法,勾子方法等。是算法执行的一个模版。
- 具体方法
具体方法是算法中较稳稳定的部分,所以抽象类中给出了方法的具体实现。
- 抽象方法
抽象方法正是定义中所说的延迟到子类实现的方法。
- 勾子方法
一般模版方法会给出默认实现,子类中看情况对这个方法进行覆盖重写。
UML
实现过程
/**
* Created by tiantian on 2018/7/28
*/
public abstract class AbstractTemplateMethod {
public void templateMethod() {
implementedMethod();
abstractMethod();
hookMethod();
// ... more than method invoke
}
public void anotherTemplateMethod() {
// do other things
}
public abstract void abstractMethod();
public void hookMethod() {}
public void implementedMethod() {
System.out.println("I have been implemented in TemplateMethod class.");
}
// ... more than method abstract or implemented.
}
/**
* Created by tiantian on 2018/7/28
*/
public class ConcreteTempleteMethod extends AbstractTemplateMethod {
@Override
public void abstractMethod() {
System.out.println("Do something");
}
@Override
public void hookMethod() {
System.out.println("Do something in hookMethod");
}
}