模版方法模式
定義一個操作中的算法的框架,而將一些步驟延遲到子類中认境。使得子類可以不改變一個算法的結(jié)構(gòu)即可重定義該算法的某些特定步驟胚委。
模版方法模式圖例
模版方法模式的舉例
抽象父類代碼
public abstract class AbstractTemplate {
//模版執(zhí)行方法
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);
}
}
具體實(shí)現(xiàn)子類代碼
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();
}
}
執(zhí)行結(jié)果
Task1Template print init()
Task1Template print load()
Task1Template print exec()
Task1Template print end()
Task2Template print init()
Task2Template print load()
Task2Template print exec()
Task2Template print end()
模版方法模式的應(yīng)用場景
多個子類有公有的方法,并且邏輯基本相同時叉信。
重要亩冬、復(fù)雜的算法,可以把核心算法設(shè)計(jì)為模板方法硼身,周邊的相關(guān)細(xì)節(jié)功能則由各個子類實(shí)現(xiàn)硅急。
重構(gòu)時,模板方法模式是一個經(jīng)常使用的模式佳遂,把相同的代碼抽取到父類中营袜,然后通過鉤子函數(shù)約束其行為。