针对问题:许多类可能做着大同小异的事情,很多方法都有重复,可以将这些类抽象出一个继承结构,将重复的部分放在父类中来实现复用,而不同的地方由子类提供实现,和工厂方法模式类似。并且由子类提供实现这些思想可以大量用于类似回调的功能,例如java api 集合的排序功能。
模板方法模式 定义了一个算法的步骤,并允许子类为一个或多个步骤提供其实践方式。让子类别在不改变算法架构的情况下,重新定义算法中的某些步骤。
模板方法模式结构图:
模板方法模式实现代码:
/**
* 模板父类
* @author bruce
*
*/
public abstract class AbstractClass {
/**
* 模板方法
*/
public void templateMethod(){
// other method
primitiveOperation1();
//other method
primitiveOperation2();
//other method
}
public abstract void primitiveOperation1();
public abstract void primitiveOperation2();
}
/**
* 模板方法实现类A
* @author bruce
*
*/
public class ConcreteClassA extends AbstractClass{
@Override
public void primitiveOperation1() {
// TODO Auto-generated method stub
System.out.println("A: operation1");
}
@Override
public void primitiveOperation2() {
// TODO Auto-generated method stub
System.out.println("A: operation2");
}
}
/**
* 模板方法实现类B
* @author bruce
*
*/
public class ConcreteClassB extends AbstractClass{
@Override
public void primitiveOperation1() {
// TODO Auto-generated method stub
System.out.println("B: operation1");
}
@Override
public void primitiveOperation2() {
// TODO Auto-generated method stub
System.out.println("B: operation2");
}
}
/**
* 测试
* @author bruce
*
*/
public class Client {
public static void main(String[] args) {
AbstractClass aClass=new ConcreteClassA();
aClass.templateMethod();
System.out.println("----------");
aClass=new ConcreteClassB();
aClass.templateMethod();
/**
* output:
A: operation1
A: operation2
----------
B: operation1
B: operation2
*/
}
}