模板方法模式
用于规范某一算法的实现步骤,一般在父类中定义算法的一系列步骤,但不必实现每个步骤,然后子类实现其中具体的步骤,最后执行的顺序按父类中的定义。
角色:
接口:定义父类的行为。
抽象父类:定义步骤的执行顺序和若干步骤的抽象实现或空实现。
子类:继承父类,实现其抽象步骤或覆写其步骤实现。
示例:
public interface ITemplate{ void method(); }
---抽象模板类
public abstract class AbstractTemplate implements ITemplate{ // 某算法需要以下5个步骤,顺序必须如下,步骤3可省略 @Override public final void method() { process_1(); process_2(); process_3(); process_4(); process_5(); } // 父类私有 private void process_1(){ System.out.println("步骤1完成..."); } // 必须子类实现 protected abstract void process_2(); // 子类选择性覆盖 protected void process_3(){ } // 子类选择性覆盖 protected void process_4(){ System.out.println("步骤4完成..."); } // 子类不可覆盖 protected final void process_5(){ System.out.println("步骤5完成..."); } }
---子类
public class FlowTemplate extends AbstractTemplate{ @Override public void process_2(){ System.out.println("步骤2圆满完成!"); } public void process_3(){ System.out.println("步骤3圆满完成!"); } }
---调用
public class TemplateMethodTest{ public static void main(String[] args){ ITemplate flow = new FlowTemplate(); flow.method(); } }
输出:
步骤1完成...
步骤2圆满完成!
步骤3圆满完成!
步骤4完成...
步骤5完成...
可见在模板的约束下,子类按算法的顺序执行,并且有一定的自由度,自由度可由父类中的关键字定义。
end