设计模式 –
直接上代码、先按原来开发步骤、在重构到模式、即在现成代码间寻找变化点、在使用对应的设计模式!
原先
按流程执行代码
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的典型应用。