定义一个操作的算法的骨架,而将一些步骤延迟到子类中。模板方法可以使得子类不改变一个算法的结构即可重新定义该算法的某些特定步骤。
很多人都会发现其实自己在以前的编码中就已经使用过模版方法模式了。确实,模版方法模式比较简单且常用·,甚至在Java的类库中都会使用模板方法来提取公共行为至抽象类中。
模版方法很好地实现了代码的复用,下面是几种模版方法模式适用的情况:
- 一次性地实现一个算法不变的部分,而将可变的行为留给子类来实现;
- 当子类中有公共行为可以提取到公共的父类中去,并且子类有自己的“个性化要求”时;
- 适用于模版方法模式的情形,一般子类需要拓展的地方都是固定的,即仅允许在这些点进行拓展。
当然模版方法模式也是有局限性的,事实上模版方法模式就是一种反向的调用结构。抽象类调用了子类的方法,而不是传统意义上的子类调用父类方法。正是这种奇特的结构,时的拓展和维护的时候更加方便。