抽象類把部分業(yè)務(wù)邏輯用具體方法具體實現(xiàn),或者構(gòu)造方法里面實現(xiàn),而把其他需要子類來完成的方法設(shè)置為抽象方法妖胀,迫使子類務(wù)必實現(xiàn)。每種子類都可以以不同的方式進(jìn)行具體實現(xiàn)惠勒,這就是模板方法模式赚抡。
先來看下 UML 的類圖,比較簡單
這里的抽象類就是抽象模板類纠屋,定義一個或者多個抽象方法涂臣,迫使子類來完成。同時定義一個模板方法售担,該方法一般情況下是一個具體方法赁遗,給出模板方法的執(zhí)行過程,里面調(diào)用抽象方法族铆。
具體的實現(xiàn)子類是把抽象類里面務(wù)必要實現(xiàn)的方法進(jìn)行具體實現(xiàn)岩四,成為父級模板方法里面的組成部分。
看下具體代碼:
首先是抽象模板類
public abstract class AbstractTemplate {
//模板方法
public void templete(){
first();
second();
third();
}
//下面三個抽象方法需要子類來具體實現(xiàn)
public abstract void first();
public abstract void second();
public abstract void third();
}
接下來看具體實現(xiàn)骑素,這個具體類是把大象裝進(jìn)冰箱的步驟
public class ConcreteTemplete extends AbstractTemplate{
@Override
public void first() {
System.out.println("第一步開啟冰箱");
}
@Override
public void second() {
System.out.println("第二步把大象塞進(jìn)去");
}
@Override
public void third() {
System.out.println("第三步關(guān)閉冰箱");
}
}
測試下
public class Client {
public static void main(String[] args) {
AbstractTemplate template=new ConcreteTemplete();
template.templete();
}
}
幾點經(jīng)驗:
1炫乓、模板方法模式把復(fù)用代碼集中到父類端姚,子類可以直接調(diào)用峻堰;
2、抽象的父類可以級聯(lián)蔚出,進(jìn)行有效的復(fù)用部分代碼创橄;
3箩做、一般和生命周期(生命周期一般會有幾個階段)有關(guān)的東西可以考慮該模式