#include <iostream>
using namespace std;
//template模式。 class Base
{
public:
void DealWhat()
{
this->Printf1();
this->Printf2();
}
protected:
virtual void Printf1() = 0;
virtual void Printf2() = 0;//让子类实现算法的详细实现。
}; class Son1 : public Base
{
public:
void Printf1()
{
cout << "Son1::Printf1()" << endl;
}
void Printf2()
{
cout << "Son1::Printf2()" << endl;
}
}; class Son2 : public Base
{
public:
void Printf1()
{
cout << "Son2::Printf1()" << endl;
}
void Printf2()
{
cout << "Son2::Printf2()" << endl;
}
}; int main()
{
Base *b = new Son2();
b->DealWhat();
return 0;
}

感悟:

基类的方法由不同子类去详细实现,我们须要什么详细的算法

或者算法,直接构造相关的子类就能够使用,可是公共接口还

是定义在基类中,这样方便全部的子类都能够利用C++多态机制进行覆盖改写。

以下是我的详细事例详细解释:

#include <iostream>
using namespace std;
//template模式。 class Base
{
public:
Base(int a[],int n)
{
data = new int[n];
int i = 0;
for (; i < n; i++)
{
data[i] = a[i];
}
size = n;
}
void Printf()
{
int i = 0;
for (; i < size; i++)
{
cout << data[i] << " ";
}
cout << endl;
}
void DoWhat()
{
this->sort();
//算法的详细实现交给不同的子类来实现,我们通过共同拥有的接口来调用。 }
protected:
virtual void sort() = 0;//排序方法的实现。
int *data;
int size;
};
class Bubble : public Base//冒泡排序。 {
public:
Bubble(int a[], int n) :Base(a, n){}
void sort()
{
int i = 0;
int temp;
for (; i < size; i++)
{
for (int j = 0; j<(size-i-1); j++)
{
if (data[j+1]<data[j])
{
temp = data[j];
data[j] = data[j+1];
data[j+1] = temp;
}
}
}
}
};
class Insert : public Base//插入排序。 {
public:
Insert(int a[], int n) :Base(a, n){}
void sort()
{
int i = 0;
int j;
int k;
int temp;
for (; i < size; i++)
{
j = i;
temp = data[i];
for (k = 0; k <= i; k++)
{
if (data[k]>temp)
{
break;
}
}
for (; j > k; j--)
{
data[j] = data[j - 1];
}
data[j] = temp;
}
}
};
class Qulick : public Base//高速排序。
{
public:
Qulick(int a[], int n) :Base(a, n){}
void sort()
{
sort(data,0,size);
}
private:
void sort(int a[], int low, int high)
{
int i = -1;
int j = 0;
if ( low>=high )return;
int key = data[high-1];
int temp;
while (j<high)
{
while (data[j]>key)j++;
i++;
temp = data[i];
data[i] = data[j];
data[j] = temp;
j++;
}
data[i] = key;
sort(a,0,i-1);
sort(a,i+1,high);
}
};
class Select : public Base//选择排序。
{
public:
Select(int a[], int n) :Base(a, n){}
void sort()
{
int i = 0;
int j;
int temp;
for (; i < size - 1; i++)
{
for (j = i + 1; j < size; j++)
{
if (data[i]>data[j])
{
temp = data[i];
data[i] = data[j];
data[j] = temp;
}
}
}
}
}; int main()
{
int a[] = { 4, 6, 7, 9, 1, 23, 4 };
/*Base *p = new Qulick(a, 7);
p->DoWhat();
p->Printf();//插入排序。 */
Base *p = new Bubble(a,7);
p->DoWhat();
p->Printf();//冒泡排序。 return 0;
}

跟我一起透彻理解template模板模式的更多相关文章

  1. 设计模式之——Template模板模式

    Template模式又叫模板模式,是在父类中定义处理流程的框架,在子类中实现具体处理逻辑的模式.当父类的模板方法被调用时程序行为也会不同,但是,不论子类的具体实现如何,处理的流程都会按照父类中所定义的 ...

  2. Template(模板)模式

    第三章:模板模式 Template模式比较简单,是基于继承关系的一种设计模式,由父类定义处理流程框架,由子类中实现具体处理. Code: package example.template; /*** ...

  3. 三、Template 模板模式

    需求:有规格的尺子,不管何种笔写,写出的字大小.形状都是一样的?抽象为处理流程一致,仅仅是不同的实现 代码清单: 抽象类: public abstract class AbstractDisplay{ ...

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

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

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

    前言: 最近学习了Glide开源图片缓存框架,在学习到通过使用ModelLoader自定义数据源的时候,Glide巧妙的使用了Java的模板模式来对外暴露处理不同的Url数据源,今天来学习总结一下模板 ...

  6. 模板模式(Template)

    行为型:Template(模板模式) 作为一个曾经爱好写文章,但是不太懂得写文章的人,我必须承认,开头是个比较难的起步. 模板模式常规定义:模板模式定义了一个算法步骤,把实现延迟到子类. 事实上模板模 ...

  7. 设计模式之 - 模板模式(Template Pattern)

    引入:这几天在看一本讲spring源码的书<SPRING技术内幕>里面在讲加载配置文件的时候,可以有不同的加载方式,如根据文件系统目录加载配置文件(FileSystemXmlApplica ...

  8. django基础2: 路由配置系统,URLconf的正则字符串参数,命名空间模式,View(视图),Request对象,Response对象,JsonResponse对象,Template模板系统

    Django基础二 request request这个参数1. 封装了所有跟请求相关的数据,是一个对象 2. 目前我们学过1. request.method GET,POST ...2. reques ...

  9. 设计模式——模板模式(Template Pattern)

    在读Spring源码的时候,发现Spring代码中运用了大量的模板模式,比如根据文件系统目录加载配置文件(FileSystemXmlApplicationContext),类路径加载配置文件(Clas ...

随机推荐

  1. 关于ECDSA/ECC(密钥加密传输)和ECDSA/ECDH(密钥磋商)

    关于ECDSA/ECC(密钥加密传输)和ECDSA/ECDH(密钥磋商) 来源: https://blog.csdn.net/xueyepiaoling/article/details/6243337 ...

  2. PL/SQL 查询结果集直接修改数据

    使用t.rowid,查询可以直接在查询结果中修改提交 SELECT t.rowid,t.* from  UC_ROLE t where ROLE_NAME like '% %'

  3. POJ3680:Intervals(离散化+最大流最小费用)

    Intervals Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 9320   Accepted: 4014 题目链接:ht ...

  4. 【QC】安装

    QC不支持win8 1. 开启win8自带的IIS服务. 在控制面板-程序-启用或关闭Windows功能-Internet Information Service

  5. hdu 1301(最小生成树)

    Jungle Roads Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Tota ...

  6. 阿里最新出的图书《码出高效:Java开发手册》宣传手册图片里出了比较搞笑的错误,大家没有发现?

  7. js 抽奖小案例

    Luck Draw 在线演示:九宫格抽奖 对九宫格形式的抽奖页面进行了一些简单封装.以后有机会再更新其他形式的抽奖.

  8. Codeforces Round #449 (Div. 2) A. Scarborough Fair【多次区间修改字符串】

    A. Scarborough Fair time limit per test 2 seconds memory limit per test 256 megabytes input standard ...

  9. Python的支持工具[0] -> 环境包管理工具[0] -> pip

    pip包管理工具 / pip Package Management Tools pip是一个Python包管理工具,主要是用于安装PyPI上的软件包,可以替代easy_install工具. 1 pip ...

  10. 「kuangbin带你飞」专题十九 矩阵

    layout: post title: 「kuangbin带你飞」专题十九 矩阵 author: "luowentaoaa" catalog: true tags: mathjax ...