有时候, 我们会遇到由一系列步骤构成的过程, 这个过程从高层次上看是相同的, 但有些步骤的实现可能不同, 我们就要考虑使用模板方法
生活中的例子:坐交通工具上班, A 开车, B 做公交, 交通工具就是一个抽象模板
定义一个操作中的算法的骨架, 而将一些步骤延迟到子类中, 模板方法使得子类不改变算法的结构, 即可重定义该算法的某些特定步骤
AbstractClass: 是一个抽象模板类,templateMethod() 是模板方法,它是一个顶级逻辑的骨架, primitiveOperation() 是一个抽象方法, 是顶级逻辑的组成部分
ConcreteClass: 实现父类所定义的抽象方法, 每一个 ConcreteClass 都可以给出不同的实现, 从而是顶级逻辑的实现不同
场景: 学生抄写考试题, 并写出答案
场景分析:
- 高层次步骤: 抄题,写答案
- 没变化的步骤; 抄写的题目一样
- 有变化的步骤: 每个人的答案不同
特点:
- 1.把不变行为搬移到超类,
- 去除子类中的重复代码,
- 体现它的优势2.通过父类调用子类,
- 这是一种反向的控制
使用场景:
- 1.一次性实现一个算法的不变部分,并将可变的行为留给子类来实现。
- 2.需要通过子类来决定父类算法中某个步骤是否执行,实现子类对父类的反向控制。
来源: http://www.bubuko.com/infodetail-1950358.html