Template Method
一、定义
Define the skeleton of an algorithm in an operation, de'ferring some steps to subclasses. Template Method lets subclasses redefine certain steps of an algorithm
without changing the algorithm's structure.
定义算法主干,延缓其中某些步骤,使它们在subclass中才获得真正的定义,Template methos使subclass得以重新定义算法内的某些动作,而不需要改变算法的总体结构。
二、实现
Template Mtehod是通过继承实现的,在父类中指定 行事大纲,而在子类中说明具体要干什么。
如图所示:
说明:如图中那样,父类中定义虚函数PrimitiveOperation1()和PrimitiveOperation2(),只提供该方法主体,不提供具体实现;而且把具体实现放在子类ConcreateClass中具体实现。这就符合了延缓某些动作的实现,并且不需要改变算法的总体结构。
三、应用
常用情形:windows系统应用程序中,打开文件,顺序为文件-》打开-》文件选择-》查找。
步骤几乎都是一样的,于是MFC库将其封装作为父类,程序员直接拿来用,只是将需要自己重
写的动作函数重写就可以了,而无需写所有的打开、查找等流程动作。
如图所示:
在MFC中的实现UML如下:
解说:CDocument是MFC提供的标准父类,里面定义了一些动作主体,但是是虚函数,即子类可以重写(延缓某些动作的发生)。上图中,当myDoc调用OnFileOpen()函数时,调用的函数体中遇到Serialize(),这是一个虚函数,于是动态绑定,因为此时的this指针是CMyDoc的对象指针,而且CMyDoc中也实现了Serialize()的重写,于是调用的就成了子类中实现的Serialize()了。
四、总结:
Template Method是采用继承的方式来实现,关键点是将通用算法封装在抽象类中,将具体实现在放到子类中。