定义
在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。
类图
把共用的方法放在抽象类中,用于复用。
把不确定的方法,放入到具体类中,以便让具体类可以很好的构造自己的方法。
方法都会被装入到一个TemplateMethod方法中。
对应的方法,具体的什么时间用得到,什么时间用不到,根据条件来判断。
AbstractClass抽象类,定义抽象行为
public abstract class AbstractClass {
public static final String METHOD_1 = "m1";
public static final String METHOD_2 = "m2";
public final void templateMethod(String methodName){
if (METHOD_1.equals(methodName)){
doOperation1(methodName);
}
if (METHOD_2.equals(methodName)){
doOperation2(methodName);
}
}
protected abstract void doOperation1(String methodName);
protected abstract void doOperation2(String methodName);
}
ConcreteClass具体类,实现父类定义的一个或多个抽象方法
public class ConcreteClass extends AbstractClass {
@Override
protected void doOperation1(String methodName) {
System.out.println("method1");
}
@Override
protected void doOperation2(String methodName) {
System.out.println("method2");
}
}
客户端调用
public class test {
public static void main(String[] args) {
AbstractClass a = new ConcreteClass();
// a.templateMethod(AbstractClass.METHOD_1);
a.templateMethod(AbstractClass.METHOD_2);
}
}
模板方法是通过把不变的行为搬到父类,去除子类中的重复代码,提供很好的代码复用平台。
对比
和工厂方法
都是让具体的实现放在子类中。
工厂方法主要是生产出产品,然后去应用产品。
模板方法是在于依赖子类中的步骤中的其中几个步骤,具体的步骤已经在基类中写好了。
和策略模式
都是封装算法。
策略都是单独的一个类。可以随时去更改策略。
模板方法模式主要在于封装步骤,具体的实现是根据依靠各个子类。