模板模式(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. JAVA设计模式之模板模式

    在阎宏博士的<JAVA与模式>一书中开头是这样描述模板方法(Template Method)模式的: 模板方法模式是类的行为模式.准备一个抽象类,将部分逻辑以具体方法以及具体构造函数的形式 ...

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

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

  3. Java设计模式(七) 模板模式

    [模板模式]在一个方法中定义了一个算法的骨架,而将一些步骤延迟到子类中.模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤. 1,定义模板类 package com.pattern ...

  4. 模板模式与策略模式/template模式与strategy模式/行为型模式

    模板模式 模版模式,又被称为模版方法模式,它可以将工作流程进行封装,并且对外提供了个性化的控制,但主流程外界不能修改,也就是说,模版方法模式中,将工作的主体架构规定好,具体类可以根据自己的需要,各自去 ...

  5. 12. 星际争霸之php设计模式--模板模式

    题记==============================================================================本php设计模式专辑来源于博客(jymo ...

  6. Head First 设计模式系列之一----模板模式(java版)

    开篇序言:四人帮的设计模式对于我这个菜鸟看着打瞌睡,后面果断买了一本head first的,感觉还可以像看报纸似的,花了一个寒假的晚上看了大半,确实内容也挺吸引人的,讲的很风趣.否则我也不可能,大过年 ...

  7. 模板模式(Template)

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

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

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

  9. java模式:模板模式的简单理解

    1.模板模式就是用虚类作为基类将几个要执行差不多操作中相同的部分提取出来,不同的部分各自实现! 2.下面给出简单栗子: 我要进行的操作是将大象和狐狸放入冰箱,放入大象和狐狸有相同的步骤:开冰箱和关冰箱 ...

随机推荐

  1. 2015安徽省赛 D.锐雯上单不给就送

    题目描述 <英雄联盟>(简称LOL)是由美国Riot Games开发,腾讯游戏运营的英雄对战网游.<英雄联盟>除了即时战略.团队作战外,还拥有特色的英雄.自动匹配的战网平台,包 ...

  2. HDU1879 kruscal 继续畅通工程

    继续畅通工程 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Subm ...

  3. pro git 使用积累

    http://www.zhihu.com/question/20070065 git相关问题的收集 Git 是 Linux 之父 Linus Trovalds,为管理 Linux 内核代码而建立的,被 ...

  4. EtherCAT数据帧结构

    EtherCAT数据直接使用以太网数据帧(以太网帧解释http://blog.chinaunix.net/uid-23080322-id-118440.html)传输,使用的帧类型为0x88A4.Et ...

  5. java\c程序的内存分配

    JAVA 文件编译执行与虚拟机(JVM)介绍 Java 虚拟机(JVM)是可运行Java代码的假想计算机.只要根据JVM规格描述将解释器移植到特定的计算机上,就能保证经过编译的任何Java代码能够在该 ...

  6. JS Replace 全部替换字符 用法

    转载自:http://www.cnblogs.com/skykang/archive/2011/08/04/2127158.html <script language="javascr ...

  7. CodeForces - 426B(对称图形)

    Sereja and Mirroring Time Limit: 1000MS   Memory Limit: 262144KB   64bit IO Format: %I64d & %I64 ...

  8. 解决 g++ error:/usr/lib/rpm/redhat/redhat-hardened-cc1 No that file and directory

    You need to install redhat-rpm-config which is required by some of the qt switches, probably: sudo d ...

  9. 【图文详解】scrapy爬虫与动态页面——爬取拉勾网职位信息(2)

    上次挖了一个坑,今天终于填上了,还记得之前我们做的拉勾爬虫吗?那时我们实现了一页的爬取,今天让我们再接再厉,实现多页爬取,顺便实现职位和公司的关键词搜索功能. 之前的内容就不再介绍了,不熟悉的请一定要 ...

  10. 【读书笔记】读《JavaScript DOM 编程艺术-第2版》

    1.DHTML DHTML曾被认为是HTML/XHTML.CSS和JavaScript相结合的产物,就像今天的HTML5那样,但把这些东西真正凝聚在一起的是DOM.如果真的需要来描述这一过程的话,“D ...