设计模式 模板方法(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个步骤的。

模式总结


浙公网安备 33010602011771号