一个抽象类定义了执行它的方法或者模板,子类可以按照需求重写方法,但是调用是在抽象类或者父类中进行。
模板抽象类:
1 public abstract class AbstractTemplate { 2 3 abstract void init(); 4 5 abstract void loading(); 6 7 abstract void destroy(); 8 9 public final void make() {10 init();11 loading();12 destroy();13 }14 }
实现模板方法样例:
1 public class TemplateDemo extends AbstractTemplate { 2 3 @Override 4 void init() { 5 System.out.println("init"); 6 } 7 8 @Override 9 void loading() {10 System.out.println("loading");11 }12 13 @Override14 void destroy() {15 System.out.println("destroy");16 }17 }
测试类:
1 public class Main {2 3 public static void main(String[] args) {4 TemplateDemo templateDemo = new TemplateDemo();5 templateDemo.make();6 }7 }
模板方法封装了不变的部分,行为由父类控制,子类只需关注具体方法的实现。
不同的实现需要不同的子类,会导致子类过多。
spring源码中大量使用了模板模式。