亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

JAVA設(shè)計模式之模板模式

original 2016-11-12 11:12:21 418
abstrait:在閻宏博士的《JAVA與模式》一書中開頭是這樣描述模板方法(Template Method)模式的:  模板方法模式是類的行為模式。準備一個抽象類,將部分邏輯以具體方法以及具體構(gòu)造函數(shù)的形式實現(xiàn),然后聲明一些抽象方法來迫使子類實現(xiàn)剩余的邏輯。不同的子類可以以不同的方式實現(xiàn)這些抽象方法,從而對剩余的邏輯有不同的實現(xiàn)。這就是模板方法模式的用意。模板方法模式的結(jié)構(gòu)  模板方法模式是所有模式中最為常見的幾

在閻宏博士的《JAVA與模式》一書中開頭是這樣描述模板方法(Template Method)模式的:

  模板方法模式是類的行為模式。準備一個抽象類,將部分邏輯以具體方法以及具體構(gòu)造函數(shù)的形式實現(xiàn),然后聲明一些抽象方法來迫使子類實現(xiàn)剩余的邏輯。不同的子類可以以不同的方式實現(xiàn)這些抽象方法,從而對剩余的邏輯有不同的實現(xiàn)。這就是模板方法模式的用意。

模板方法模式的結(jié)構(gòu)

  模板方法模式是所有模式中最為常見的幾個模式之一,是基于繼承的代碼復用的基本技術(shù)。

  模板方法模式需要開發(fā)抽象類和具體子類的設(shè)計師之間的協(xié)作。一個設(shè)計師負責給出一個算法的輪廓和骨架,另一些設(shè)計師則負責給出這個算法的各個邏輯步驟。代表這些具體邏輯步驟的方法稱做基本方法(primitive method);而將這些基本方法匯總起來的方法叫做模板方法(template method),這個設(shè)計模式的名字就是從此而來。

  模板方法所代表的行為稱為頂級行為,其邏輯稱為頂級邏輯。模板方法模式的靜態(tài)結(jié)構(gòu)圖如下所示:

1004015-20161101161828940-1563315370.png

這里涉及到兩個角色:

  抽象模板(Abstract Template)角色有如下責任:

  ■  定義了一個或多個抽象操作,以便讓子類實現(xiàn)。這些抽象操作叫做基本操作,它們是一個頂級邏輯的組成步驟。

  ■  定義并實現(xiàn)了一個模板方法。這個模板方法一般是一個具體方法,它給出了一個頂級邏輯的骨架,而邏輯的組成步驟在相應的抽象操作中,推遲到子類實現(xiàn)。頂級邏輯也有可能調(diào)用一些具體方法。

  具體模板(Concrete Template)角色又如下責任:

  ■  實現(xiàn)父類所定義的一個或多個抽象方法,它們是一個頂級邏輯的組成步驟。

  ■  每一個抽象模板角色都可以有任意多個具體模板角色與之對應,而每一個具體模板角色都可以給出這些抽象方法(也就是頂級邏輯的組成步驟)的不同實現(xiàn),從而使得頂級邏輯的實現(xiàn)各不相同。

  源代碼

package cn.happy.a;
public abstract class Animal {
    //基本方法聲明(由子類實現(xiàn))
    public abstract String info();
    //模板方法
    public void show(){
        //info()調(diào)用基本方法
        System.out.println(info()+"我是最聰明的動物");
    }
}
package cn.happy.a;
public class Cat extends Animal{
    //基本方法的實現(xiàn)
    @Override
    public String info() {
        
        return "我是一只貓";
    }
}
package cn.happy.a;
public class Dog extends Animal{
    //基本方法的實現(xiàn)
    @Override
    public String info() {
        
        return "我是一條狗";
    }
}
package cn.happy.a;
public class Test {
    public static void main(String[] args) {
        Animal a1=new Dog();
        a1.show();
        Animal a2=new Cat();
        a2.show();
    }
}

具體模板角色類,實現(xiàn)了父類所聲明的基本方法,abstractMethod()方法所代表的就是強制子類實現(xiàn)的剩余邏輯,而hookMethod()方法是可選擇實現(xiàn)的邏輯,不是必須實現(xiàn)的。

模板模式的關(guān)鍵是:子類可以置換掉父類的可變部分,但是子類卻不可以改變模板方法所代表的頂級邏輯。

  每當定義一個新的子類時,不要按照控制流程的思路去想,而應當按照“責任”的思路去想。換言之,應當考慮哪些操作是必須置換掉的,哪些操作是可以置換掉的,以及哪些操作是不可以置換掉的。使用模板模式可以使這些責任變得清晰。

模板方法模式中的方法

  模板方法中的方法可以分為兩大類:模板方法和基本方法。

  模板方法

  •   一個模板方法是定義在抽象類中的,把基本操作方法組合在一起形成一個總算法或一個總行為的方法。

  •   一個抽象類可以有任意多個模板方法,而不限于一個。每一個模板方法都可以調(diào)用任意多個具體方法。

  基本方法

  基本方法又可以分為三種:抽象方法(Abstract Method)、具體方法(Concrete Method)和鉤子方法(Hook Method)。

  ●  抽象方法:一個抽象方法由抽象類聲明,由具體子類實現(xiàn)。在Java語言里抽象方法以abstract關(guān)鍵字標示。

  ●  具體方法:一個具體方法由抽象類聲明并實現(xiàn),而子類并不實現(xiàn)或置換。

  ●  鉤子方法:一個鉤子方法由抽象類聲明并實現(xiàn),而子類會加以擴展。通常抽象類給出的實現(xiàn)是一個空實現(xiàn),作為方法的默認實現(xiàn)。


Notes de version

Entrées populaires