第152章

小A:“模板方法模式有什麼目的?”

大B:“在一個方法中實現一個算法,並將算法中某些步驟的定義推遲,從而使得其他類可以重新定義這些步驟。在編寫一個方法的時候,考慮到算法的某些步驟可能會有不同的實現方式,我們可能會首先定出算法的框架。這樣,在定義方法的時候,我們可以將某些步驟定義爲抽象方法,或者是將它們定義爲存根方法,也可以將它們定義爲某個單獨接口中的方法,這就是模板方法模式的實現。模板方法的典型例子就是排序。java.util.Collections類將sort()方法定義爲一個模板方法,而將其中的比較交給用戶來實現,sort()方法所接受的List中的對象需要實現Comparator接口,這就是將實際算法推遲並交給其它類來實現的模板方法模式。”

例:

有一個抽象類ShowSubClassName,有兩個子類SubClassA和SubClassB繼承了該抽象類,抽象類中定義的抽象方法showName()被推遲到了兩個子類中實現(分別輸出自己的classname)。

publicabstractclassShowSubClassName{

/**

*這個方法的實現,我們交給子類完成

*/

publicabstractvoidshowName();

publicvoidshow(){

showName();

}

}

publicclassSubClassAextendsShowSubClassName{

publicvoidshowName(){

System.out.println(this.getClass().getName());

}

}

publicclassSubClassBextendsShowSubClassName{

publicvoidshowName(){

System.out.println(this.getClass().getName());

}

}

publicclassTest{

publicstaticvoidmain(String[]args){

ShowSubClassNameclassA=newSubClassA();

classA.show();

ShowSubClassNameclassB=newSubClassB();

classB.show();

}

}

第6章第179章第48章第96章第169章第171章第74章第132章第183章第218章第207章第143章第94章第110章第123章第203章第12章第51章第202章第168章第18章第165章第202章第167章第40章第90章第38章第65章第212章第5章第190章第136章第56章第219章第7章第145章第74章第28章第73章第39章第99章第82章第65章第131章第165章第218章第108章第179章第181章第112章第172章第152章第143章第37章第227章第141章第143章第142章第9章第119章第52章第193章第50章第97章第199章第181章第151章第175章第184章第188章第17章第155章第46章第30章第198章第125章第108章第120章第224章第64章第6章第195章第28章第214章第106章第174章第204章第85章第176章第208章第219章第189章第31章第104章第65章第106章第65章第220章第153章
第6章第179章第48章第96章第169章第171章第74章第132章第183章第218章第207章第143章第94章第110章第123章第203章第12章第51章第202章第168章第18章第165章第202章第167章第40章第90章第38章第65章第212章第5章第190章第136章第56章第219章第7章第145章第74章第28章第73章第39章第99章第82章第65章第131章第165章第218章第108章第179章第181章第112章第172章第152章第143章第37章第227章第141章第143章第142章第9章第119章第52章第193章第50章第97章第199章第181章第151章第175章第184章第188章第17章第155章第46章第30章第198章第125章第108章第120章第224章第64章第6章第195章第28章第214章第106章第174章第204章第85章第176章第208章第219章第189章第31章第104章第65章第106章第65章第220章第153章