什么是模板方法模式

利用继承的特性,抽象类定义方法,作为模板,它的字类按需重新方法实现,调用时以抽象类中定义的方式进行。

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

适用场景

提前在父类定义好模板方法,字类只管调用,或字类简单重写的场景

代码实现

  1. /**
  2. * 父类 定义模板方法
  3. */
  4. abstract class Template {
  5. final void template1() {
  6. System.out.println("模板方法1,final修饰,不可修改");
  7. }
  8. void template2() {
  9. System.out.println("模板方法2,可以修改");
  10. }
  11. }
  12. /**
  13. * 字类1 完全继承父类模板方法,不做任何修改
  14. */
  15. class Sub1 extends Template {
  16. void subMethod() {
  17. System.out.println("字类自己的方法");
  18. }
  19. }
  20. class Sub2 extends Template {
  21. @Override
  22. void template2() {
  23. super.template2();
  24. System.out.println("增加字类的处理逻辑");
  25. }
  26. }
  27. /**
  28. * 模板方法模式 测试
  29. */
  30. public class TemplateMethodPattern {
  31. public static void main(String[] args) {
  32. Sub1 sub1 = new Sub1();
  33. sub1.template1();
  34. sub1.template2();
  35. Sub2 sub2 = new Sub2();
  36. sub2.template1();
  37. sub2.template2();
  38. //输出:
  39. //模板方法1,final修饰,不可修改
  40. //模板方法2,可以修改
  41. //模板方法1,final修饰,不可修改
  42. //模板方法2,可以修改
  43. //增加字类的处理逻辑
  44. }
  45. }