模板
https://www.collinsdictionary.com/dictionary/english/template
1. countable noun
A template is a thin piece of metal or plastic which is cut into a particular shape. It is used to help you cut wood, paper, metal, or other materials accurately, or to reproduce the same shape many times.
Trace around your template and transfer the design onto a sheet of card.
2. countable noun [usually singular]
If one thing is a template for something else, the second thing is based on the first thing.
The deal is likely to provide a template for other agreements. [+ for]
从上定义可以看出,模板并不是直接可用, 而是用于生产可用东西的工具,生产出来的东西和模板具有相同的形状。
生活中有很多场景都使用了模板的思想:
例如: 海报模板, 下载一份样式精美的海报模板, 将其中个性化的内容修改为待宣传的信息,则一份精美的海报很快就制作出来了。
对于上例中: 海报模板,整个模子是不变的,对于生成的任何一份海报,整体风格上是一致的;
此模板中开放让用户修改的部分, 一般使用XXX标注, 这些内容属于模板中的占位符,需要使用者替换为自己信息。
海报模板 --- 抽象的
用户制作的海报 --- 是具体的, 其继承了海报模板的整体样式风格。
另外一个例子,bootstrap模板:
http://www.cssmoban.com/tags.asp?page=2&n=Bootstrap
模板方法
https://blog.csdn.net/lenotang/article/details/2911246
模板方法Gof的定义是:在一个方法里定义算法的骨架,将一些步骤延迟到其子类。如下图:
AbstractClass主要是定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。TemplateMethod 使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。这有点像C语言中的一个“钩子(hook)”;同时将公用的代码移植到TemplateMethod中,实现的代码的公用。
理解: 模板方法为一个抽象方法, 此方法并不能直接运行, 因为其实半成品, 此方法中存在若干还未实现的方法,
此方法,需要在子类中实现。
于是由如下关系:
抽象类 ------ 定义模板方法 && 定义虚方法(模板方法中调用的抽象函数)
构造成 模板方法为程序算法的骨架,属于高层次抽象逻辑。
具体类 ------ 实现抽象类定义的虚方法, 每个具体的子类都有不同的虚方法实现。