模板方法的定义:
在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中,模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。
下面是UML图,
使用的场景:
在android中,我们进行自定义view的使用,必须重写view的 OnMeasure, OnLayout,OnDraw三个方法,这个就是使用了模板方法设计模式。
在java中,java提供的排序算法,你必须实现 compareTo()方法,实际上这也是模板方法的设计模式,因为太常见了,我们很少去问为什么,提醒的是,在java 6一下的版本中,使用mergerSort也就是归并方法进行排序,在java 8中则使用的是TimSort排序,所以在实际中注意兼容性。
其次,关于“钩子”的问题,虽然在模板中定义好了步骤,但是在实际中,有些步骤可以不使用,或者在一定的条件下触发使用,这个时候,需要考虑使用钩子,钩子就是针对这种情况下产生的。