模版方法模式
定义一个操作中的算法的框架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
模版方法模式图例
模版方法模式.png模版方法模式的举例
抽象父类代码
public abstract class AbstractTemplate {
//模版执行方法
public final void execTask() {
init();
load();
exec();
end();
}
protected void init(){
print("init()");
}
protected void load(){
print("load()");
}
protected abstract void exec();
protected abstract void end();
protected void print(String value) {
System.out.println(getClass().getSimpleName() + " print " + value);
}
}
具体实现子类代码
Task1Template.java
public class Task1Template extends AbstractTemplate {
@Override
protected void exec() {
print("exec()");
}
@Override
protected void end() {
print("end()");
}
}
Task2Template.java
public class Task2Template extends AbstractTemplate {
@Override
protected void exec() {
print("exec()");
}
@Override
protected void end() {
print("end()");
}
}
测试类代码
public class TemplateApplication {
public static void main(String[] args) {
AbstractTemplate abstractTemplate1 = new Task1Template();
abstractTemplate1.execTask();
AbstractTemplate abstractTemplate2 = new Task2Template();
abstractTemplate2.execTask();
}
}
执行结果
Task1Template print init()
Task1Template print load()
Task1Template print exec()
Task1Template print end()
Task2Template print init()
Task2Template print load()
Task2Template print exec()
Task2Template print end()
模版方法模式的应用场景
多个子类有公有的方法,并且逻辑基本相同时。
重要、复杂的算法,可以把核心算法设计为模板方法,周边的相关细节功能则由各个子类实现。
重构时,模板方法模式是一个经常使用的模式,把相同的代码抽取到父类中,然后通过钩子函数约束其行为。
网友评论