模板方法模式(Template Method Pattern)
定義一個操作中的算法的框架,而將一些步驟延遲到子類,使得子類可以不改變一個算法的結構即可重定義該算法的某些特定步驟。
簡單的說,模板方法模式就是把相關子類都會具有的一些操作封裝在抽象類中,而將可變的部分通過繼承擴展,這樣提取公共部分代碼,使得項目易於維護。基本方法由子類實現,因此子類可以通過擴展增加相應功能,符合開閉原則。
實例代碼:
public abstract class AbstractClass{//抽象模板類
protected abstract void method1();//算法步驟1
protected abstract void method2();//算法步驟2
public void templateMethod(){//模板方法,定義算法結構
this.method1();
this.method2();
}
}
public class ConcreateClass extends AbstractClass{//具體模板類
protected void method1(){}
protected void method2(){}
}
模板方法模式擴展:鉤子方法
模板方法模式就是在模板方法中按照一定規則順序調用基本方法,有時,我們需要根據子類的狀態決定算法順序,這時可以使用鉤子方法來動態決定方法順序。
public abstract class AbstractClass{//抽象模板類
protected abstract void method1();//算法步驟1
protected abstract void method2();//算法步驟2
public void templateMethod(){//模板方法,定義算法結構
this.method1();
this.method2();
}
protected boolean isExec(){
return true;
}
}
public class ConcreateClass extends AbstractClass{//具體模板類
protected void method1(){}
protected void method2(){}
private boolean execFlag = true;
public void setExec(boolean flag){
this.execFlag = falg;
}
protected boolean isExec(){
return this.execFlag;
}
}
父類建立框架,子類在重寫父類部分的方法後,再調用從父類繼承的方法,產生不同的結果,這就是模板方法模式。