zl程序教程

您现在的位置是:首页 >  APP

当前栏目

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

2023-03-31 10:52:09 时间

直接上代码、先按原来开发步骤、在重构到模式、即在现成代码间寻找变化点、在使用对应的设计模式!

原先

按流程执行代码

import org.junit.Test;

// 程序库开发人员
class Library {
    public void step1() {}
    public void step3() {}
    public void step5() {}
}

// 应用程序开发人员
class Application {
    public boolean step2() {
        return true;
    }

    public void step4() {}
}

public class TemplateMethod {
    @Test
    public void T1() {
        Library lib = new Library();
        Application app = new Application();

        lib.step1();

        if (app.step2()) {
            lib.step3();
        }

        for (int i = 0; i < 5; i ++) {
            app.step4();
        }

        lib.step5();
    }
}

重构

程序库开发人员帮你做好步骤了、封装了变化点

对于Template Method来说,有一个前提,就是Run()方法必须要是稳定的。如果Run()不稳定,那么没有一个稳定的软件的骨架,就不存在这样一种设计模式。假定,所有方式都是稳定,那么其实也没有必要使用设计模式。

import org.junit.Test;

// 程序库开发人员
interface Library {
    default void step1() {}
    default void step3() {}
    default void step5() {}
    boolean step2();
    void step4();

    // 封装变化点、Template Method
    default void run() {
        step1();

        if (step2()) {
            step3();
        }

        for (int i = 0; i < 5; i ++) {
            step4();
        }

        step5();
    }
}

// 应用程序开发人员
class Application implements Library {
    public boolean step2() {
        return true;
    }

    public void step4() {}

}

public class TemplateMethod {
    @Test
    public void T1() {
        Application app = new Application();
        app.run();
    }
}

在软件构建过程中、对于某一项任务、它常常有稳定的整体操作结构、但各个子步骤却有很多改变的需求、或者由于固有的原因(比如框架与应用之间的关系)而无法和任务的整体结构同时实现

如何在确定稳定操作结构的前提下、来灵活应对各个子步骤的变化或者晚期实现需求

Template Method是一种非常基础性的设计模式,在面向对象的系统中,有着大量的应用。他用最简洁的机制为很多应用程序的框架提供了灵活的扩展点,是代码复用方面的基本实现结构。
除了可以灵活对应子步骤的变化外,“不要调用我,让我来调用你”的反向控制结构是Template Method的典型应用。