小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();
}
}