模板模式(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. UIScrollview使用

    改变内容偏移 - (void)setContentOffset:(CGPoint)contentOffset animated:(BOOL)animated;  // animate at const ...

  2. 他们在军训,我在搞 OI(二)

    Day 2 7:26 2016/8/25 新的一天又开始了! 走在上学的路上,抬头看看北京少有的蓝天,太阳的威力不再那么明显,甚至输给了挡住它的云朵.迎面吹来了凉爽的风,夏天的燥热,早已无影无踪. 许 ...

  3. Intersection of Two Arrays | & ||

    Intersection of Two Arrays Given two arrays, write a function to compute their intersection. Example ...

  4. css整个页面离顶部的距离

    body { padding:0; margin:0; font-size:12px; line-height:22px; } 说明: 整个页面离顶部的距离是22像素

  5. html标签属性大全

    <marquee>...</marquee>普通卷动 <marquee behavior=slide>...</marquee>滑动 <marqu ...

  6. sysctl命令详解

    个人一般sysctl -p 或sysctl -a比较多使用 sysctl配置与显示在/proc/sys目录中的内核参数.可以用sysctl来设置或重新设置联网功能,如IP转发.IP碎片去除以及源路由检 ...

  7. Shopping(hdu 3768)

    题意:给你一个无向图,求从0号点开始遍历所有的指定点再回到0号点的最短路径 #include<cstdio> #include<iostream> #include<qu ...

  8. 神经网络(luogu 1038 答案错误,出题人语体教)

    题目背景 人工神经网络(Artificial Neural Network)是一种新兴的具有自我学习能力的计算系统,在模式识别.函数逼近及贷款风险评估等诸多领域有广泛的应用.对神经网络的研究一直是当今 ...

  9. 电话连线(codevs 1003)

    题目描述 Description 一个国家有n个城市.若干个城市之间有电话线连接,现在要增加m条电话线(电话线当然是双向的了),使得任意两个城市之间都直接或间接经过其他城市有电话线连接,你的程序应该能 ...

  10. Txx考试(codevs 2894)

    2894 Txx考试  时间限制: 1 s  空间限制: 32000 KB  题目等级 : 黄金 Gold 题解  查看运行结果     题目描述 Description Txx是一个成绩很差的人,考 ...