Loading

设计模式之模板方法

一、模板方法的使用场景

在软件构建过程中,对某一项任务,它常常有稳定的整体操作结构,但是各个子步骤有很多改变需求,或者由于固有原因(如框架和应用之间的关系)而无法和任务的整体结构同时实现。如何在确定一个稳定操作的前提下,来灵活应对各个子步骤的变化,或者晚期实现需求。

我们先看一个例子:

//类库开放人员
public class Library {

    public void step1() {

    }

    public void step3() {

    }

    public void step5() {

    }
}

 

//应用开发人员
public class Application {

    public boolean step2() {
        return true;
    }

    public void step4() {

    }

    public static void main(String[] args) {
        Library library = new Library();
        Application application = new Application();

        library.step1();

        if (application.step2()) {
            library.step3();
            application.step4();
        }
        library.step5();
    }
}

 

某个功能需要使用5个方法,类库开发人员只能实现其中三个,另外的需要应用开放人员去开发,再进行组合。可能你也会这么做吧,但是这么做其实并不是一个完美的解决方案。因为main方法的整个流程是固定的,只是其中的几个步骤的实现是可变的。

 二、使用模板方法

我们对Library类进行改良:

//类库开放人员
public abstract class Library {

    private void step1() {

    }

    private  void step3() {

    }

    private void step5() {

    }
    
    protected abstract boolean step2();

    protected abstract void step4();
    
    
    public void run() {
        step1();
        if(step2()) {
            step3();
            step4();
        }
        step5();
    }
}
//应用开发人员
public class Application extends Library{

    public boolean step2() {
        return true;
    }

    public void step4() {

    }

    public static void main(String[] args) {
        Application application = new Application();
        application.run();
    }
}

 

应用开放人员不需要再关心方法的调用流程,只需要实现定制的方法即可,将早绑定变为晚绑定,从而实现代码的重用,降低开放人员的开放难度。简单好用

 

 

 

 

 

 

 

 

 

 

 

posted @ 2021-01-29 00:53  Charming-Boy  阅读(63)  评论(0编辑  收藏  举报