1.定義#
定義一個操作中的算法的框架,而將一些步驟延遲到子類中。使得子類可以不改變一個算法的結(jié)構(gòu)即可重定義該算法的某些特定步驟。
模板模式僅僅使用了繼承機(jī)制,將共性的部分提取到父類中實(shí)現(xiàn),子類只實(shí)現(xiàn)有差別的部分。
2.類圖#
類圖
3.實(shí)現(xiàn)#
3.1抽象模板類##
public abstract class AbstractClass(){
protected abstract void doSomething();
protected abstract void doAnything();
public void templateMethod(){
//調(diào)用子類實(shí)現(xiàn)的方法
this.doAnything();
this.doSomething();
}
}
3.2具體模板類##
pbulic class ConcreteClass1 extends AbstractClass{
protected void doAnything(){
//業(yè)務(wù)邏輯
}
protected void doSomething(){
//業(yè)務(wù)邏輯
}
}
4.應(yīng)用#
1.多個子類有公有的方法,并且邏輯基本相同。
2.重要、復(fù)雜的算法,可以把核心算法設(shè)計為模板方法。
3.重構(gòu)時,把相同的代碼抽取到父類中,然后通過鉤子函數(shù)約束其行為。