1.模式定义:定义一个操作的算法骨架,而将一些步骤延迟到子类中。TemplateMethod使得子类可以不改变一个算法的结构即可重定义该算法的某些

  1. abstract class AbstractClass{
  2. public void operation(){
  3. System.out.println("connect mysql...");
  4. System.out.println("pre...");
  5. System.out.println("open...");
  6. templateMethod();
  7. System.out.println("close...");
  8. }
  9. abstract protected void templateMethod();
  10. }
  11. class SubClass1 extends AbstractClass{
  12. @Override
  13. protected void templateMethod() {
  14. System.out.println("insert into user(...) values(...)");
  15. }
  16. }
  17. class SubClass2 extends AbstractClass{
  18. @Override
  19. protected void templateMethod() {
  20. System.out.println("select * from user");
  21. }
  22. }
  23. public class TemplateMethodTest {
  24. public static void main(String[] args) {
  25. AbstractClass abstractClass = new SubClass1();
  26. abstractClass.operation();
  27. System.out.println("-----------------------");
  28. abstractClass = new SubClass2();
  29. abstractClass.operation();
  30. }
  31. }

image.png
如上图,像一些数据库连接、打开、关闭之类的操作其实并不需要交由客户端每次去控制,这也容易增加出错的机率,对于客户端来说只需要关心使用就可以了。

应用场景
1.当你想让客户端只扩展算法的特定步骤,而不是整个算法或其结构时,请使用TemplateMethod模式。
2.当你有几个类包含几乎相同的算法,但有一些细微的差异时,请使用此模式。
优点:
1.你可以让客户端只覆盖大型算法的某些部分,从而减少算法其他部分发生的更改对它们的影响。
2.你可以将重复的代码拖放到超类中。

ServletApi&Spring中的应用
1javax.servlet.http.HttpServlet
2org.springframework.web.servlet.mvc.AbstractController