設計模式-模板方法模式

定義:在父類中定義處理流程的框架,在子類中實現具體的處理就成爲模板方法模式(Template Method),

假設我們制定一個木偶的流程,我們想要一個做胖木偶的類,還有一個做瘦木偶的類,每個類的方法都差不多,只是具體的實現有所不同,這時我們就可以用模板方法模式,類圖如下:

我們在AbstractPerson類中定義了製作玩偶的流程(在createPerson中去調用abstract方法head、body、arms、legs分別去創建玩偶的頭、身體、胳膊、腿),而在子類中去做具體的實現,具體實現如下:

public abstract class AbstractPerson {

    protected String head;
    protected String body;
    protected String arms;
    protected String legs;

    abstract void head();
    abstract void body();
    abstract void arms();
    abstract void legs();

    final void createPerson(){
        head();
        body();
        arms();
        legs();
        System.out.println(head + "," + body + "," + arms + "," + legs + "創建成功!");
    }
}
public class FatPerson extends AbstractPerson {
    void head() {
        head = "大圓臉";
    }

    void body() {
        body = "大肚子";
    }

    void arms() {
        arms = "圓胳膊";
    }

    void legs() {
        legs = "大粗腿";
    }
}
public class ThinPerson extends AbstractPerson {
    void head() {
        head = "瓜子臉";
    }

    void body() {
        body = "A4腰";
    }

    void arms() {
        arms = "細胳膊";
    }

    void legs() {
        legs = "大長腿";
    }
}

如上所示,抽象類AbstractPerson類只負責具體的流程指定,而實現類FatPerson和ThinPerson分別對流程進行了具體的實現。

下面進行測試

public class Main {
    public static void main(String[] args){
        AbstractPerson fatPerson = new FatPerson();
        AbstractPerson thinPerson = new ThinPerson();
        fatPerson.createPerson();
        thinPerson.createPerson();

    }
}

結果

那麼用模板方法的模式有什麼好處呢?

1.  可以在抽象類中定義每個處理的節點,防止遺漏,如果自己實現,不小心某個類忘記了head方法就不好了。

2. 可以讓子類只關心具體方法的實現,而不用管這些方法的調用順序。如果有些方法一定要按照嚴格的順序調用,用模板方法實現也是個不錯的選擇。

3. 調用時引用可以用抽象類,無論父類的對象中保存哪個子類的實例,程序都可以正常運行,這種原則稱爲里氏替換原則。

 

模板方法模式屬於行爲型設計模式,劃分了責任和算法

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章