核心思想
讓抽象類給出程序的骨架和輪廓,在抽象類中編寫主方法,並申明一些抽象方法,迫使子類實現剩餘的邏輯。
模板方法和策略模式的異同:
相同:通過父類來實現一系列的具體類
不同:策略模式是通過接口或者抽象類來爲子類定義共同的接口,以實現對不同子類的切換。
模板方法模式則需要在抽象類中爲子類定義好抽象方法,讓子類來實現。
模板抽象類:必須是抽象類,首先需要定義一個主方法,該方法是外部調用的入口,需要申明爲final的,在該方法中實現對多種模板方法的調用。
public abstract class AbstractCalculator {
public final int calculate(String expression,String deliString){
int[] array=split(expression,deliString);
return calculate(array[0],array[1]);
}
abstract public int calculate(int num1,int num2);
public int[] split(String expression,String deliString){
String array[]=expression.split(deliString);
int[] arrayInt=new int[2];
arrayInt[0]=Integer.parseInt(array[0]);
arrayInt[1]=Integer.parseInt(array[1]);
return arrayInt;
}
}
模板方法模式的使用:子方法:
加法:
public class Plus extends AbstractCalculator{
@Override
public int calculate(int num1, int num2) {
// TODO Auto-generated method stub
return num1+num2;
}
}減法:
public class Minus extends AbstractCalculator {
@Override
public int calculate(int num1, int num2) {
// TODO Auto-generated method stub
return num1-num2;
}
}等等
模板方法模式的使用:
定義一個abstract的Class,在這個抽象類中,至少包涵一個實現模板方法的不可被子類改寫的public方法(需要生命爲final),在這個公共方法中,實現模板方法的業務處理邏輯,同時,在這個方法中,還包括對本類抽象方法的調用;再根據業務的需要定義各種不同的子類,並實現模板方法的所有抽象方法。
個人理解:
(主方法調用了抽象函數,其他類想要調用的時候只要調用這個主方法就可以調用子類實現了的抽象函數了,所以才說該主方法是外部調用的入口,實現了對多種模板的調用)