蓝色为变化的 红色的是稳定的
//应用程序开发人员
class Application {
//变化
public boolean step2() {
//...
return true;
}
//变化
public void step4() {
//...
}
//稳定
public static void main(String args[]) {
Library lib = new Library();
Application app = new Application();
lib.step1();
if (app.step2()) {
lib.step3();
}
for (int i = 0; i < 4; i++) {
app.step4();
}
lib.step5();
}
}
//程序库开发人员
class Library {
//稳定
public void step1() {
//...
}
//稳定
public void step3() {
//...
}
//稳
public void step5() {
//...
}
}
```java
//程序库开发人员
abstract class Library {
public void run() {//稳定 template method
step1();
if (step2()) {//支持变化 ==> 虚函数的多态调用
step3();
}
for (int i = 0; i < 4; i++) {
step4();//支持变化 ==> 虚函数的多态调用
}
step5();
}
protected void step1() {//稳定
//...
}
protected void step3() {//稳定
//...
}
protected void step5() {//稳定
//...
}
abstract boolean step2();//变化
abstract void step4();//变化
}
//应用程序开发人员
class Application extends Library {
@Override
protected boolean step2() {
//... 子类重写实现
return true;
}
@Override
protected void step4() {
//... 子类重写实现
}
public static void main(String args[]) {
Library lib = new Application();
lib.Run();
}
}