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. Mac 系统显示和隐藏文件的方法

    1. 代码法: 显示Mac隐藏文件的命令:defaults write com.apple.finder AppleShowAllFiles -bool true 隐藏Mac隐藏文件的命令:defau ...

  2. msql修改字符

    我申请了一个jsp空间,把数据库传上去,编码如下mysql> show variables like '%char%';+--------------------------+--------- ...

  3. 【原】hive 操作笔记

    1.建表: hive> CREATE TABLE pokes (foo INT, bar STRING); hive> CREATE TABLE invites (foo INT, bar ...

  4. SRM 387(1-250pt)

    DIV1 300pt 题意:有m种颜色的球若干个放在n个盒子里.每次操作可从一个盒子里拿出任意个球(不必同色),放进另一个盒子.要求终态为:1.最多有一个盒子里面装有不同色的球,该盒子成为joker ...

  5. 3 kafka介绍

     本博文的主要内容有 .kafka的官网介绍 http://kafka.apache.org/ 来,用官网上的教程,快速入门. http://kafka.apache.org/documentatio ...

  6. Pick-up sticks - POJ 2653 (线段相交)

    题目大意:有一个木棒,按照顺序摆放,求出去上面没有被别的木棍压着的木棍.....   分析:可以维护一个队列,如果木棍没有被压着就入队列,如果判断被压着,就让那个压着的出队列,最后把这个木棍放进队列, ...

  7. QUEUE——队列(procedure)

    #include <stdio.h> #include <stdlib.h> #include "queue.h" int main() {  int i; ...

  8. 使用Spring-data-redis操作Redis的Sentinel

    介绍 Spring-Data-Redis项目(简称SDR) 是对Redis的Key-Value数据存储操作提供了更高层次的抽象,提供了一个对几种主要的redis的Java客户端(例 如:jedis,j ...

  9. 终端command总结

    Ctrl+Alt+Delete Ctrl+Shift+Esc Ctrl+D Alt+F4 Shift+F10 win+m Ctrl+Alt+. Ctrl+A Ctrl+S osk taskmgr cm ...

  10. jquery中字符串类型转换成整形的方法

    jQuery有一个自带的函数为parseInt():这个函数可以把字符型的数字转换成整形例如: parseInt("1234"); //返回1234 parseInt(" ...