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的生命周期。