核心思想
让抽象类给出程序的骨架和轮廓,在抽象类中编写主方法,并申明一些抽象方法,迫使子类实现剩余的逻辑。
模板方法和策略模式的异同:
相同:通过父类来实现一系列的具体类
不同:策略模式是通过接口或者抽象类来为子类定义共同的接口,以实现对不同子类的切换。
模板方法模式则需要在抽象类中为子类定义好抽象方法,让子类来实现。
模板抽象类:必须是抽象类,首先需要定义一个主方法,该方法是外部调用的入口,需要申明为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),在这个公共方法中,实现模板方法的业务处理逻辑,同时,在这个方法中,还包括对本类抽象方法的调用;再根据业务的需要定义各种不同的子类,并实现模板方法的所有抽象方法。
个人理解:
(主方法调用了抽象函数,其他类想要调用的时候只要调用这个主方法就可以调用子类实现了的抽象函数了,所以才说该主方法是外部调用的入口,实现了对多种模板的调用)