C++设计模式——模板方法(Template Method)
模板方法(template method)设计模式用于定义一个包含许多步骤的算法框架,允许子类重写(覆盖)算法的某一个步骤而不改变算法整体的流程和框架。
模板方法提供的流程是骨架,子类无须覆盖模板方法本身,只需继承即可,即模板方法无须是 virtual 的。
例如一个算法(如聚类算法)可能包含初始化(initialization)、迭代(iteration)以及后处理(post-preprocessing)三个环节,现实中存在多种初始化(initialization)的方法。
实现模板方法设计模式的手段即是声明一个包含模板方法的抽象基类,该模板方法用于调用其他原生操作,子类可对这些原生操作重写和覆盖。
实现上:
在模板方法(基类)内部定义程序或算法的执行流程,也即模板方法是整个算法执行的起点。
其 UML 类图如下:
#include <iostream>
#include <boost\current_function.hpp>
#include <string>class Algorithm
{
public:void calculate()// 模板方法{initilization();iteration();postprocessing();}protected:virtual void initilization() = 0;virtual void iteration() = 0;virtual void postprocessing() = 0;
};class AAlgorithm :public Algorithm
{
private:void initilization(){std::cout << std::string("AAlgorithm ") + BOOST_CURRENT_FUNCTION << std::endl;}void iteration(){std::cout << std::string("AAlgorithm ") + BOOST_CURRENT_FUNCTION << std::endl;}void postprocessing(){std::cout << std::string("AAlgorithm ") + BOOST_CURRENT_FUNCTION << std::endl;}
};class BAlgorithm :public Algorithm
{
private:void initilization(){std::cout << std::string("BAlgorithm ") + BOOST_CURRENT_FUNCTION << std::endl;}void iteration(){std::cout << std::string("BAlgorithm ") + BOOST_CURRENT_FUNCTION << std::endl;}void postprocessing(){std::cout << std::string("BAlgorithm ") + BOOST_CURRENT_FUNCTION << std::endl;}
};int main(int, char**)
{AAlgorithm aalgo;BAlgorithm balgo;aalgo.calculate();std::cout << "==============================" << std::endl;balgo.calculate();return 0;
}
C++设计模式——模板方法(Template Method)相关推荐
- 设计模式--模板方法(Template Method)模式
模式定义 定义一个操作的算法骨架,而将一些步骤延迟到子类中,使得子类可以不改变一个算法的结构即可重定义该算法某些特定步骤 类图 要点总结 Template Method模式是一种非常基础性的设计模式, ...
- 设计模式:模板方法(Template Method Pattern)
模板方法模式: 在一个抽象类公开定义了执行它的方法的模板,它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行. 属于行为型模式. spring ioc容器初始化时运用到模板方法模式. / ...
- 设计模式-模板方法(Template Method Patten)
定义一个操作中算法的框架,而将一些步骤延迟到一些子类.使得子类可以不改变一个算法的结构即可重新定义改算法的某些特定步骤 先举一个使用模板方法的小例子方便大家加深印象和理解 首先画下类图 image.p ...
- 咕泡-模板方法 template method 设计模式笔记
2019独角兽企业重金招聘Python工程师标准>>> 模板方法模式(Template Method) 定义一个操作中的算法的骨架,而将一些步骤延迟到子类中 Template Met ...
- 31模板方法(Template Method)
无处不在的Template Method 如果你只想掌握一种设计模式,那么它就是Template Method! 动机(Motivate): 变化 -----是软件设计的永恒主题,如 ...
- 模板方法(Template Method)
无处不在的Template Method 如果你只想掌握一种设计模式,那么它就是Template Method! 动机(Motivate): 变化 -----是软件设计的永恒主题,如何 ...
- 封装算法: 模板方法(Template Method)模式
template method(模板方法)模式是一种行为型设计模式.它在一个方法中定义了算法的骨架(这种方法被称为template method.模板方法),并将算法的详细步骤放到子类中去实现.tem ...
- 设计模式03——Template Method模式
定义 模板方法(Template Method)模式就是带有模板功能的模式 ,组成模板方法的方法被定义在父类中,这些方法是抽象方法,在模板方法中规定了这些方法的执行流程,这些抽象方法需要子类来具体实现 ...
- java 模板方法_Java设计模式21:模板方法(Template Method)
1.功能 定义一个操作中的算法的骨架,而将一些步骤延迟到子类中.模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤 . 2.模式中的角色 2.1 抽象类(AbstractClass ...
- C++设计模式之Template Method(模板方法模式)
模板方法模式总结起来就是灵活运用C++的多态性,灵活运用普通函数,虚函数,纯虚函数的组合, 打个比方,每个人每天的生活都不一样,老师要上课,学生要学习,程序员要编程,但是每个人都需要吃饭与休息,这样我 ...
最新文章
- JavaScript 的使用简单总结
- TCP/IP 7.2 OSPF 虚链路
- Boost:与容器相关的BOOST_TEST_EQ测试
- JavaScript 访问对象属性和方法及区别
- zookeeper的名词复盘-会话
- 【渝粤题库】广东开放大学 物业财税管理基础 形成性考核 (2)
- jenkins自动化构建iOS应用配置过程中遇到的问题
- JQUERY插件JqueryAjaxFileUplaoder----更简单的异步文件上传
- 姚安娜首个代言摩卡汽车人舞蹈短片出炉
- 数据分析从入门到进阶,35本包邮送到家
- php 递归函数 示例,php递归使用示例(php递归函数)_PHP
- 【转载】MIXLY二次开发(傻瓜版)
- PCB线宽与电阻的计算
- 重标极差分析 Hurst指数计算
- 9.ansible变量之fact
- 爱班级电脑端下载|二维码签到
- 刘强东的敌与友:嘲讽王健林一亿小目标,性侵案后李国庆说该原谅
- 从员工到总经理的成长笔记:自慢(6)
- 拼多多API接口,item_search - 按关键字搜索商品
- 为什么有时优盘是只读模式_u盘只读设置怎么弄? u盘只读设置使用方法
热门文章
- 判定2022年是否闰年c语言_闰年的来历
- 导出域控中不活动的计算机_满满干货丨小薇和你聊聊计算机二级的那些事儿
- mysql大于等于怎么写_MySQL 对于千万级的大表要怎么优化?我写了6000字的深度解读...
- 剑指offer面试题12. 矩阵中的路径(矩阵搜索)(深度优先搜索)(剪枝)
- tensorflow精进之路(十九)——python3网络爬虫(下)
- MYSQL C API风格demo
- Python数据结构与算法笔记(六):数据结构——列表和栈
- ckpt转pb,batch normalzition 出现的ValueError问题
- 4十4十4写成乘法算式_小学数学二年级下册数学1-4单元知识点复习提前准备才能考的更好...
- 感觉前路任重而道远呀。