模板方法,定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的机构即可重定义该算法的某些特定。
实例:
在剖析定义之前我们看这样一种场景:有一天,小红和小芳要到‘贝兰妮’买衣服。为了简单起见,买衣服分为三个步骤依次进行:选衣服-----》试衣服---》付款,最终完成买衣服。其中选衣服需要根据不同的人的喜好来选,试衣服的行为都是相同,也只能用现金。
根据需求:我得知 买衣服的三个步骤,而且它们是有顺序的,缺一不可的。
下面是我们的代码实现与设计:
1)UML图:
说明:BuyClothes()中,依次包含下列方法:ChooseClothes(),DryDownClothes(),PayMoney()
2)代码实现:
它也是一个模板方法的例子。
模板方法剖析:
通过上面的例子剖析:
1)定义一个操作中的算法的骨架:
BuyClothes(){
1)ChooseClothes()
2)DryDownClothes()
3)PayMoney()
}
说白了就是,实现一个功能的一系列步骤都在父类给定义好了,我们只需要一步步去实现,其中每一个步骤的执行都是有先后顺序的。
2)而将一些步骤延迟到子类中:由于BuyClothes()中的ChooseClothes()是无法确定的,只有根绝个人的需求才可以。所以在父类定义成抽象的来定义,在子类当中实现个性化。
3)它的好处就是:通过上面的例子就可以知道:改变父类中的某些步骤,不要更改整个骨架,只需要更改需要更改的部分。
总结:
模板方法就是一种继承,它的特殊之处在于:它在父类当中定义了一个功能架构,该功能中某些步骤是不确定的,需要在子类给予实现。