模板方法模式

模板方法模式

用于规范某一算法的实现步骤,一般在父类中定义算法的一系列步骤,但不必实现每个步骤,然后子类实现其中具体的步骤,最后执行的顺序按父类中的定义。

角色:

接口:定义父类的行为。

抽象父类:定义步骤的执行顺序和若干步骤的抽象实现或空实现。

子类:继承父类,实现其抽象步骤或覆写其步骤实现。

示例:

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