1、概念
模板模式是规范定义流程,并将公共流程和独立流程分离,在父类中实现公共流程,在具体的子类中实现独立流程,不同的子类提供各自独立流程的实现方式。
流程也可以表述为算法。
父类的职责是规范流程,它的方式可以是接口,也可以是抽象类,如果有公共的流程,最好使用抽象类,使用abstract修饰独立流程的方法,为公共流程提供通用的实现方式。
子类的职责是提供独立流程的实现方式。
2、UML图

3、代码
父类ParentClass,规范流程,提供公共流程的实现
/**
*
* @Title: ParentClass.java
* @Package template
* @Description: 规范流程,并为公共的流程提供通用实现。
* @version V1.0
*/
public abstract class ParentClass {
/**
*
* @Title: commonStep
* @Description: 这个方法规范流程,不允许子类重写,所以使用final修饰
*/
public final void commonStep() {
commonStep1();
commonStep2();
independentStep();
}
/**
*
* @Title: commonStep1
* @Description: 公共流程1
*/
private void commonStep1() {
}
/**
*
* @Title: commonStep2
* @Description: 公共流程2
*/
private void commonStep2() {
}
/**
*
* @Title: independentStep
* @Description: 独立流程,需要子类去实现
*/
public abstract void independentStep();
}
子类ChildClassOne,提供独立流程的实现
/**
* @Title: ChildClassOne.java
* @Package template
* @Description: 子流程,提供独立流程的实现方式
* @version V1.0
*/
public class ChildClassOne extends ParentClass {
@Override
public void independentStep() {
System.out.println("独立流程的第一种实现方案");
}
}
4、讨论
上述的实现方式可以进一步修改为
- ParentInterface,父接口。
- ParentClass,实现ParentInterface,还是抽象类。
- ChildClassOne:继承ParentClass,提供独立流程的实现方式。
模板模式中核心是流程的制定,公共流程和独立流程的分离。其中流程规范和公共流程是不允许修改的。
5、示例
Servlet的生命周期。