Template 模式是很简单模式,但是也应用很广的模式。Template 是采用继承的方式实现算法的异构,其关键点就是将通用算法封装在抽象基类中,并将不同的算法细节放到子类中实现。Template 模式获得一种反向控制结构效果, 这也是面向对象系统的分析和设计中一个原则 DIP(依赖倒置:Dependency Inversion Principles) 。其含义就是父类调用子类的操作(高层模块调用低层模块的操作) ,低层模块实现高层模块声明的接口。这样控制权在父类(高层模块) ,低层模块反而要依赖高层模块。

 //////////////////Template.h////////////////////////////////////////////////////////
#pragma once
class AbstractClass
{
public:
virtual ~AbstractClass();
void TemplateMethod();
protected:
AbstractClass();
virtual void PrimitiveOperation1() = ;
virtual void PrimitiveOperation2() = ;
private:
}; class ConcreteClass1 :public AbstractClass
{
public:
~ConcreteClass1();
ConcreteClass1();
protected:
void PrimitiveOperation1();
void PrimitiveOperation2();
private:
}; class ConcreteClass2 :public AbstractClass
{
public:
~ConcreteClass2();
ConcreteClass2();
protected:
void PrimitiveOperation1();
void PrimitiveOperation2();
private:
};
 ///////////Template.cpp///////////////////////////////////////////////////////////////
#include "Template.h"
#include <iostream>
using namespace std;
AbstractClass::AbstractClass()
{ }
AbstractClass::~AbstractClass()
{ }
void AbstractClass::TemplateMethod()
{
this->PrimitiveOperation1();
this->PrimitiveOperation2();
} ConcreteClass1::ConcreteClass1()
{
cout<<"泡茶"<<endl; }
ConcreteClass1::~ConcreteClass1()
{ }
void ConcreteClass1::PrimitiveOperation1()
{
cout<<"放入茶叶"<<endl;
}
void ConcreteClass1::PrimitiveOperation2()
{
cout<<"倒入开水"<<endl;
} ConcreteClass2::ConcreteClass2()
{
cout<<"泡咖啡"<<endl;
}
ConcreteClass2::~ConcreteClass2()
{ }
void ConcreteClass2::PrimitiveOperation1()
{
cout<<"放入咖啡"<<endl;
}
void ConcreteClass2::PrimitiveOperation2()
{
cout<<"加适量开水"<<endl;
}
 /////////////main.cpp/////////////////////////////////////////////////////////////
#include "Template.h"
#include <iostream>
int main()
{
AbstractClass* a = new ConcreteClass1();
a->TemplateMethod();
AbstractClass* b = new ConcreteClass2();
b->TemplateMethod();
getchar();
}

Template 模式的更多相关文章

  1. Java事务处理全解析(五)—— Template模式

    在本系列的上一篇文章中,我们讲到了使用TransactionManger和ConnectionHolder完成线程安全的事务管理,在本篇中,我们将在此基础上引入Template模式进行事务管理. Te ...

  2. Spring中Template模式与callback的结合使用浅析

    Spring不论是与ibatis,还是与Hibernate的结合中,都使用到了Template模式与callback技术,来达到简化代码实现的目的.Template模式也即模板模式,用于对一些不太变化 ...

  3. [设计模式2]--模板(Template)模式

    原文出处:http://blog.csdn.net/lwbeyond/article/details/7517679 一. 问题 在面向对象系统的分析与设计过程中经常会遇到这样一种情况:对于某一个业务 ...

  4. Template模式

    在开发时,有时会遇到对于一个算法的实现,在不同的对象中有不同的实现,可是这个算法的框架是同样的.这时能够使用Template模式或Strategy模式. Template是採用继承的方式来实现这一点, ...

  5. Java设计模式(13)模板模式(Template模式)

    Template模式定义:定义一个操作中算法的骨架,将一些步骤的执行延迟到其子类中. 其实Java的抽象类本来就是Template模式,因此使用很普遍.而且很容易理解和使用,我们直接以示例开始: pu ...

  6. C++设计模式实现--模板(Template)模式

    一. 问题 在面向对象系统的分析与设计过程中常常会遇到这样一种情况:对于某一个业务逻辑(算法实现)在不同的对象中有不同的细节实现,可是逻辑(算法)的框架(或通用的应用算法)是同样的.Template提 ...

  7. 设计模式C++描述----02.模板(Template)模式

    一. 问题 在面向对象系统的分析与设计过程中经常会遇到这样一种情况:对于某一个业务逻辑(算法实现)在不同的对象中有不同的细节实现,但是逻辑(算法)的框架(或通用的应用算法)是相同的.Template提 ...

  8. PHP--Smarty的template模式

    function change_year() { var ss = $('#select_year').children('option:selected').val(); $.ajax({ type ...

  9. 设计模式C++模板(Template)模式

    设计模式C++描述----02.模板(Template)模式(转载) 一. 问题 在面向对象系统的分析与设计过程中经常会遇到这样一种情况:对于某一个业务逻辑(算法实现)在不同的对象中有不同的细节实现, ...

随机推荐

  1. Say To ME

    每天都要有计划,无计划不生活. 计划包括天计划和月计划. 每个月应该有月主题. 避免大概,可能,貌似,等不肯定的词语.增强自信心,增强给别人的自信心. 不熬夜,早睡. 多运动,每周应该至少出门一次,运 ...

  2. javascipt取整数四舍五入

    1.丢弃小数部分,保留整数部分 parseInt(5/2) 2.向上取整,有小数就整数部分加1 Math.ceil(5/2) 3,四舍五入. Math.round(5/2) 4,向下取整 Math.f ...

  3. Python IDLE 清屏工具

     转载自:http://www.cnblogs.com/maybego/p/3234055.html   1.下载clearwindow.py(右击-目标另存为,直接点击会打开脚本内容). 2.拷贝c ...

  4. Json 的日期格式转换成DateTime

    JSON 的日期形式:”/Date(1242357713797+0800)/” , 下面我们就用以下C#的方法将他转换成DateTime类型: /// <summary> /// Json ...

  5. del重复数

    楼主 发表于: 2010-06-21 11:46:31 本帖最后由 luckycynthia 于 2010-06-21 11:47:46 编辑 在抓取数据后对数据进行操作的途中,有时候会碰到重复数据, ...

  6. 【leetcode】com/problems/surrounded-regions/

    dfs 栈溢出,bfs超时,用dfs非递归就不溢出了,前后写了1一个星期class node { int i; int j; public node(int i1,int j1) { i=i1; j= ...

  7. HDU2037 今年暑假不AC 贪心算法

    贪心算法 : 贪心算法就是只考虑眼前最优解而忽略整体的算法, 它所做出的仅是在某种意义上的局部最优解, 然后通过迭代的方法相继求出整体最优解. 但是不是所有问题都可以得到整体最优解, 所以选择贪心策略 ...

  8. ubuntu 100M 到 10M

    浅析ubuntu下如何修改网卡网速--将100M网卡改为10M网卡 公司的路由器可能比较陈旧,机器启动之后,默认网卡是100M的,但是登录QQ经常出现掉线现象,后来得知原来需要将100M网卡降频到10 ...

  9. poj 1847 Tram【spfa最短路】

    Tram Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 12005   Accepted: 4365 Description ...

  10. UVa12171 hdu2771 UVaLive4291 Sculpture

    填坑系列(p.171) orz rjl 代码基本和rjl的一样 #include<cstdio> #include<cstring> #include<cstdlib&g ...