模板模式(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. 如何改变服务器的本地域名来访问本地服务器 而不用localhost或者127.0.0.1来访问

    1. vim nginx.conf 如下: server {                listen       80;                server_name pma;       ...

  2. linux rsync +inotify 实现 实时同步

    前言:     rsync可以实现触发式的文件同步,但是通过crontab守护进程方式进行触发,同步的数据和实际数据会有差异,而inotify可以监控文件系统的各种变化,当文件有任何变动时,就触发rs ...

  3. Java--读写文件综合

    package javatest; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream ...

  4. VMware Snapshot 工作原理

    VMware中的快照是对VMDK在某个时间点的“拷贝”,这个“拷贝”并不是对VMDK文件的复制,而是保持磁盘文件和系统内存在该时间点的状态,以便在出现故障后虚拟机能够恢复到该时间点.如果对某个虚拟机创 ...

  5. datetime中strftime和strptime用法

    from datetime import * format = "%Y-%m-%d %H:%M:%S" a=datetime.now() day=a.day b=a.replace ...

  6. Sybase IQ导出文件的几种方式

    IQ有四种方法,将表的数据导出为文本文件:1.重定向 SELECT * FROM TABLE1 ># D:MYDATATABLE1.TXT -- 文件生成在执行语句的客户端上 2.通过选项导出 ...

  7. iOS7总显示状态栏的解决方法

    转载http://blog.csdn.net/langresser_king/article/details/18351021 2014年2月份开始,苹果需求开发者必须使用xcode5开发游戏和应用, ...

  8. iOS __block类型变量作用域

    看下图 在c语言中,2个独立的函数是不可能互相访问局部变量的,但是__block提供了这个功能,它不单单能读变量,还可以对变量进行写!上图说明,block获得了i最后的真实值5,没有只取得0,这都是& ...

  9. 网络流-最大流 模板(poj 1273)

    #include<cstdio> #include<iostream> #include<cstring> #include<queue> #defin ...

  10. BaseActivity与BaseFragment的封装

    这篇博客主要是从BaseActivity与BaseFragment的封装开始,总结我们在实战开发中关于Fragment的注意事项以及心得体会. 先看以下效果图: 这里模拟的是用户登录模块,你可能会说, ...