定义
模板方法是结构型设计模式的一种,它定义了算法的骨架,并将算法中的某些步骤推迟到子类实现。模板方法可以让子类重新定义算法中的某些步骤,而不需要修改算法的整体结构。
作用
复用
如果没有模板方法,那么对于相似的业务逻辑将不得不定义多个类,这样就会存在重复的代码。为了复用,可以将重复使用的方法提取到父类中,在父类中定义一个模板方法实现这些相似的业务逻辑,对于不同的部分则抽象出方法由不同的子类实现。
扩展
模板方法和责任链模式都兼具复用和扩展的作用,在框架中使用较多。例如 Servlet 规范中,我们只需要实现 get/post 等对应处理方法即可,而这些方法则由模板方法调用。
实现
模板方法的实现较为简单,使用 Java 代码实现如下。
public abstract class AbstractClass { public abstract void subMethod1(); public abstract void subMethod2(); public final void templateMethod(){ //省略通用的业务逻辑... this.subMethod1(); this.subMethod2(); //省略通用的业务逻辑... } }
- 定义一个抽象类。
- 定义一个模板方法,方法的修饰符为 final,保证算法不会被子类修改。
- 在模板方法中实现算法的骨架,并调用其他由子类实现的抽象方法。