模板方法模式:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中实现,但是步骤由父类定义。典型的一个应用就是jdk中的排序接口compare,Collections类中定义了排序的步骤:
public static <T> void sort(List<T> list, Comparator<? super T> c) {
Object[] a = list.toArray();
Arrays.sort(a, (Comparator)c);
ListIterator i = list.listIterator();
for (int j=0; j<a.length; j++) {
i.next();
i.set(a[j]);
}
}
先转化为list 然后排序 然后再转化为目标集合,其中排序的实现接口是在具体的排序类中定义的。
下面是个小demo:
package com.jerry.design.templateMethod;
import java.util.ArrayList;
import java.util.List;
// 测试类
public class Test {
public static void main(String[] args) {
AbstractMethod methodA = new ConcreteMethodA();
methodA.templateMethod();
AbstractMethod methodB= new ConcreteMethodB();
methodB.templateMethod();
}
}
abstract class AbstractMethod {
protected abstract void method1();
protected abstract void method2();
public final void templateMethod() {
method1();
method2();
}
}
class ConcreteMethodA extends AbstractMethod{
protected void method1() {
System.out.println("ConcreteMethodA的method1()");
}
@Override
protected void method2() {
System.out.println("ConcreteMethodA的method2()");
}
}
class ConcreteMethodB extends AbstractMethod{
protected void method1() {
System.out.println("ConcreteMethodB的method1()");
}
protected void method2() {
System.out.println("ConcreteMethodB的method2()");
}
}