设计模式 模板方法(Template Method)

概念


简单例子

假设有一个工作流程需要5步工作,135步工作交给library人员负责,24步交给app人员负责

结构化设计代码(早绑定)

lib代码

public class template1_lib {
    void Step1(){

    }
    void Step3(){

    }
    void Step5(){

    }
}

app代码

public class template1_app  {
    boolean Step2(){
        return true;
    }
    boolean Step4(){
        return  true;
    }

    public static void main(String[] args) {
        template1_lib lib=new template1_lib();
        template1_app app=new template1_app();
        lib.Step1();
        if(app.Step2()) lib.Step3();
        if(app.Step4()) lib.Step5();
    }
}

虽然语法上是面向对象,但是思维上仍然是结构化过程。在后面的代码维护上难度很大。

采用面向对象软件设计流程(晚绑定)

public abstract class template2_lib {
    public void run(){
        Step1();
        if(Step2()){
            Step3();
        }
        if(Step4()){
            Step5();
        }
    }
    protected void Step1(){

    }
    protected void Step3(){

    }
    protected void Step5(){

    }
    //在lib里定义对应app的工作2和4的抽象方法
    abstract boolean Step2();
    abstract boolean Step4();
}

public class template2_app extends template2_lib {
    @Override
    boolean Step2() {
        System.out.println("来自APP的工作2");
        return false;
    }

    @Override
    boolean Step4() {
        System.out.println("来自APP的工作4");
        return false;
    }

    public static void main(String[] args) {
        template2_lib lib=new template2_app();//左父右子实现多态
        lib.run();

    }
}

使用了多态,让程序有了更多的可变性。符合了下图的要求
同时满足了核心思想让变化的去依赖不变的
使用Template Method前提是保证骨架是稳定的,在这个例子就是run方法是稳定调用5个步骤的。

模式总结

posted @ 2021-03-20 12:26  一个经常掉线的人  阅读(42)  评论(0)    收藏  举报