模板方法(Template Method)模式:定义一个操作中的算法骨架,而将一些步骤延迟到子类中,使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
AbstractClass:抽象类,实现一个模板方法,定义一个算法的骨架;定义抽象的原语操作,具体的子类重定义它们以实现一个算法
ConcreteClass:具体类,实现原语操作以完成算法中特定子类的步骤;
适用性:
(1)一次性实现一个算法的不变部分,并将可变部分的行为留给子类实现;
(2)将各个子类中公共的行为提取出来并集中在一个公共父类中以避免代码重复;
(3)控制子类扩展,只允许在这些点进行扩展;
特点:
(1)模板方法提供一种反向的控制结构,即父类调用子类的操作;
(2)提供钩子操作(Hook Operations),提供了缺省的行为(通常是空函数),子类可以在必要时进行扩展
实现:
(1)原语操作可以定义为protected,这样只能被子类调用,必须重定义的原语函数定义为virtual,
一般模版方法都加上final关键字,不允许被覆写;
(2)由于重定义的操作越多,子类越冗余,所以尽量减少原语函数;
(3)可以给必须重定义的函数减少前缀,方便识别;