一、定义
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是采用继承的方式来实现,关键点是将通用算法封装在抽象类中,将具体实现在放到子类中。
Template Method,布布扣,bubuko.com
原文:http://blog.csdn.net/fengzhongzhishenfu/article/details/23597307