模板模式(template)
在面向对象系统的设计和开发过程中,一定会有这样的情况:对于一些功能,在不同的对象身上展示不同的作用,但是功能的框架是一样的,这就是模板(template)模式的用武之地,我说的不知道你有没有理解,一会代码展示的时候,你就会一目了然,代码很简单。
在template模式中,采用的是继承的方式实现上述的内容。
template模式的结构图:

对于template模式的实现就是运用了多态的概念,对于不同的子类赋值给父类,父类表现出的形式是不同的。
看简单的实现代码:
#include
using namespace std;

class abstractClass
{
 
public:
     void TemplateMethod();
//   virtual ~abstractClass(); //虚析构

protected:
//    abstractClass();
    virtual void Test1()=0;//纯虚函数
    virtual void Test2()=0;

};

class testClass1:public abstractClass
{
//     public:
//         testClass1();
//         ~testClass1();
    protected:
        void Test1();
        void Test2();

};
class testClass2:public abstractClass
{
// public:
//     testClass2();
//     ~testClass2();
protected:
    void Test1();
    void Test2();
};

void abstractClass::TemplateMethod()
{
    Test1();
    Test2();
}
void testClass1::Test1()
{
    cout<<"testClass1's test1"<<endl;
}
void testClass1::Test2()
{
    cout<<"testClass1's test2"<<endl;
}

void testClass2::Test1()
{
    cout<<"testClass2's test1"<<endl;
}
void testClass2::Test2()
{
    cout<<"testClass2's test2"<<endl;
}

int main()
{
    abstractClass *a=new testClass1();
    abstractClass *b=new testClass2();
    //abstractClass *c=new abstractClass(); 此方法是不行的,因为其为抽象类
    a->TemplateMethod();
    b->TemplateMethod();
    //c->TemplateMethod();
    return 0;
}
对于template模式,相信大家通过简单的代码实现可以理解了吧!
正像前面说的那样:
template是采用继承的方式实现功能的不同,其关键点就是将通用功能封装在抽象基类中,并将不同的功能细节放到子类中实现。采用一种称为:DIP(依赖倒置:Dependency Inversion Principles),就是父类去调用子类的功能,高层去控制底层,底层为高层的需要做基础,以实现不同的功能展示。在template模式中,采用的是继承的方式实现上述的内容,看到继承后,脑海里会出现一句话:尽量采用组合,少用继承。高内聚,低耦合的存在导致继承 的用武之地有所限制,因为继承增加了模块与模块之间的耦合度。所以从这一方面(继承)可看出,template模式是有一定的限制的。比如上面代码里的testClass1类的实现是不能被其他的类(除了自己的父类)复用的,假设我们要创建一个与abstractClass的很相似的类abstractClass1,对于abstractClass1是复用不了testClass1的实现,因为后者不是继承的前者,因为两者没有任何的关系。但是我们确实需要这么一个abstractClass1类怎么办呢?这是我们以后所要学习的策略(Strategy)模式所要解决的问题。

模板模式(C++) 【转】相关推荐

  1. 模板模式(TemplateMethod)和策略(StrategyMethod)模式

    2019独角兽企业重金招聘Python工程师标准>>> 模板模式和 策略模式使用场景类似,都是把算法进行封装,可以用分离高层算法和低层的具体实现细节.都允许高层算法独立于他的具体实现 ...

  2. 设计模式快速学习(六)模板模式

    举个例子:我们写HTML的时候,先写head然后写body,这样完成了一个空HTML页面的架子,我们的这一系列行为就是一个模板.模板模式中,首先会定义一个抽象类来声明这个事件模板,子类实现并被调用.也 ...

  3. 模板模式(template)解析例子

    摘要:本文深入浅出的讲述了设计模式中的模板模式,并给出了简单的示例,例子浅显易懂,并附带源代码. 模板模式属于行为型模式,其意图是定义一个操作的算法骨架,而将一些步骤延迟到子类中,可以不改变一个算法的 ...

  4. Android开发之模板模式初探

    模板模式我觉得在Android的开发中是最长用到的,基本是随处可见的,认识该模式,有助于我们对Android的源码及框架有一个更深层次的认识.那什么是模板模式呢,模板模式就是定义一个基本框架,将其中的 ...

  5. 深入理解模板模式及实际应用

    2019独角兽企业重金招聘Python工程师标准>>> 原来写了一个博客,记一次Spring环境使用模板模式.用了之后美滋滋.但是通过这几天的压力测试.发现,都怪自己太年少,太懵懂, ...

  6. 7.泡妞与设计模式(八)模板模式

    TEMPLATE METHOD 模板模式 模板方法模式:模板方法模式准备一个抽象类,将部分逻辑以具体方法以及具体构造子的形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑.不同的子类可以以不同的方 ...

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

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

  8. java 抽象类 模板_Java抽象类的构造模板模式用法示例

    搜索热词 本文实例讲述了Java抽象类的构造模板模式用法.分享给大家供大家参考,具体如下: 一 点睛 模板模式的一些简单规则. 抽象父类可以只定义需要使用的某些方法,而不能实现的部分抽象成抽象方法,留 ...

  9. java 之 模板模式(大话设计模式)

    模板模式,我们很多人都用过,而且大家都比较喜欢这个模式,先看一下类图 大话设计模式-类图 作为一个程序员,不懂得"偷懒",在笔者看来不是很合格哦!当我们编写程序时,发现很多个类所走 ...

最新文章

  1. Hdu 2522 hash
  2. OpenCL异构扩展
  3. 湖南理工学院计算机老师信息,郭观七(计算机与信息工程系)老师 - 湖南理工学院 - 院校大全...
  4. ubantu 16.04 mysql_Ubuntu 16.04下安装MySQL
  5. 用DELETE删除的文件怎么免费找回不用购买不用注册码
  6. html怎么让图片自动动起来,css如何让图片动起来?
  7. learn go return fuction
  8. jmeter的脚本录制3
  9. 平坦瑞利衰落下的QPSK性能仿真
  10. H5/web前端工程简历中的项目经验
  11. 计算机知识的研修总结,计算机信息技术学习研修总结
  12. 《还珠格格》《大宅门》取景地将被拍卖:3.6亿起拍
  13. 经典谢幕千千静听(最终版本)7.0.4 去广告增强版下载
  14. Linux常用命令--压缩解压命令
  15. vue实现好看的相册、图片网站
  16. 人脸识别行业应用状况及发展前景模式分析报告
  17. 【R语言】必学包之dplyr包
  18. paddleSlim(一)剪裁
  19. Mac系统配置环境变量保姆级教程
  20. 网络怎么改变计算机,怎么更改电脑上网IP地址

热门文章

  1. 未来智能实验室成立,建设世界第一个智能系统智商评测和趋势研究机构
  2. 永远不要辞职,除非……
  3. 字节跳动教育裁员:赔付方式N+2
  4. TCP/IPICMP报文的分类
  5. Django REST framework API 指南(2):响应
  6. Emacs支持gomodifytags
  7. C#编程(五十三)----------字典DictionaryTKey,TValue
  8. 【笔记】web语音相关
  9. Linux服务器生产环境中的文件删除与替换
  10. 武汉科技大学ACM :1004: C语言程序设计教程(第三版)课后习题6.3