针对问题:许多类可能做着大同小异的事情,很多方法都有重复,可以将这些类抽象出一个继承结构,将重复的部分放在父类中来实现复用,而不同的地方由子类提供实现,和工厂方法模式类似。并且由子类提供实现这些思想可以大量用于类似回调的功能,例如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 */ } }