抽象類把部分業務邏輯用具體方法具體實現,或者構造方法里面實現,而把其他需要子類來完成的方法設置為抽象方法,迫使子類務必實現。每種子類都可以以不同的方式進行具體實現,這就是模板方法模式。
先來看下 UML 的類圖,比較簡單
這里的抽象類就是抽象模板類,定義一個或者多個抽象方法,迫使子類來完成。同時定義一個模板方法,該方法一般情況下是一個具體方法,給出模板方法的執行過程,里面調用抽象方法。
具體的實現子類是把抽象類里面務必要實現的方法進行具體實現,成為父級模板方法里面的組成部分。
看下具體代碼:
首先是抽象模板類
public abstract class AbstractTemplate {
//模板方法
public void templete(){
first();
second();
third();
}
//下面三個抽象方法需要子類來具體實現
public abstract void first();
public abstract void second();
public abstract void third();
}
接下來看具體實現,這個具體類是把大象裝進冰箱的步驟
public class ConcreteTemplete extends AbstractTemplate{
@Override
public void first() {
System.out.println("第一步開啟冰箱");
}
@Override
public void second() {
System.out.println("第二步把大象塞進去");
}
@Override
public void third() {
System.out.println("第三步關閉冰箱");
}
}
測試下
public class Client {
public static void main(String[] args) {
AbstractTemplate template=new ConcreteTemplete();
template.templete();
}
}
幾點經驗:
1、模板方法模式把復用代碼集中到父類,子類可以直接調用;
2、抽象的父類可以級聯,進行有效的復用部分代碼;
3、一般和生命周期(生命周期一般會有幾個階段)有關的東西可以考慮該模式