模版模式


定義:一個操作中的算法的骨架,而將一些步驟延遲到子類中。模版方法可以使得子類可以不改變一個算法的結構即可重定義該算法的某些特定步驟

還是上例子

首先定義的是父類,也就是定義了今天問題的模版,包含兩個測試,每個測試包含題目與答案,在本例子中,答案是每個人的不同結果,所以這裏將answer1answer2 放到子類中去實現,

public abstract class PaPerTest
{
    public void question1()
    {
        System.out.println("questionA");
        System.out.println("答案" + answer1());
    }

    public void question2()
    {
        System.out.println("questionB");
        System.out.println("答案" + answer2());
    }

    abstract public String answer1();

    abstract public String answer2();
}

第一個子類,只要給出兩個問題的答案就可以了,

public class PaPerTestA extends PaPerTest
{

    @Override
    public String answer1()
    {
        return "a";
    }

    @Override
    public String answer2()
    {
        return "b";
    }

}

第二個子類,同上,也只是給出答案即可

public class PaperTestB extends PaPerTest
{

    @Override
    public String answer1()
    {
        return "c";
    }

    @Override
    public String answer2()
    {
        return "d";
    }

}

客戶端調用代碼,這裏PaPerTest a = new PaPerTestA();將子類實例化到父類,也就調用了父類的方法;同時因爲實例化的是不同的子類,answer1answer2 也都是調用的對應的子類的實現,這樣就可以把實現放到客戶端調用時

public class TemplateMain
{

    public static void main(String[] args)
    {
        PaPerTest a = new PaPerTestA();
        a.question1();
        a.question2();
        PaPerTest b = new PaperTestB();
        b.question1();
        b.question2();
    }
}

總結

模版模式也是將父類的方法放到子類中去實現,將類的實例化延遲到調用時,也就是面向對象編程的多態性,JAVA本來就是全虛類的,本身就支持這種延遲實例化

發佈了106 篇原創文章 · 獲贊 49 · 訪問量 33萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章