目录

基本概念

例子和实例


基本概念

模板方法模式:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。

结构图如下(此图来自大话设计模式):

模板方法模式是通过把不变行为搬移到超类中,去除子类中的重复代码来提现他的优势。

模板方法模式提供了一个很好的代码复用。

当不变和可变的行为在方法的子类实现中混合在一起的时候,不变的行为就会在子类中重复出现。通过模板方法模式把这些行为搬移到单一的地方,这样就帮助子类摆脱重复不变行为的纠缠。

例子和实例

程序运行截图如下:

源码如下:

Head.h

#ifndef HEAD_H
#define HEAD_Hclass Fundamental{public:virtual void primitiveOperation1();virtual void primitiveOperation2();void templateMethod();virtual ~Fundamental();
};class ConcreteClassA: public Fundamental{public:void primitiveOperation1();void primitiveOperation2();virtual ~ConcreteClassA();
};class ConcreteClassB: public Fundamental{public:void primitiveOperation1();void primitiveOperation2();virtual ~ConcreteClassB();
};#endif    //HEAD_H

Head.cpp

#include "Head.h"
#include <iostream>
#include <string>
using namespace std;void Fundamental::primitiveOperation1()
{cout << "Fundamental::primitiveOperation1()" << endl;
}void Fundamental::primitiveOperation2()
{cout << "Fundamental::primitiveOperation1()" << endl;
}void Fundamental::templateMethod()
{this->primitiveOperation1();this->primitiveOperation2();
}Fundamental::~Fundamental()
{cout << "Fundamental::~Fundamental()" << endl;
}void ConcreteClassA::primitiveOperation1()
{cout << "ConcreteClassA::primitiveOperation1()" << endl;
}void ConcreteClassA::primitiveOperation2()
{cout << "ConcreteClassA::primitiveOperation1()" << endl;
}ConcreteClassA::~ConcreteClassA()
{cout << "ConcreteClassA::~ConcreteClassA()" << endl;
}void ConcreteClassB::primitiveOperation1()
{cout << "ConcreteClassB::primitiveOperation1()" << endl;
}void ConcreteClassB::primitiveOperation2()
{cout << "ConcreteClassB::primitiveOperation2()" << endl;
}ConcreteClassB::~ConcreteClassB()
{cout << "ConcreteClassB::~ConcreteClassB()" << endl;
}

main.cpp

#include "Head.h"
#include <iostream>
#include <string>
using namespace std;int main(int *argc, int *argv[]){Fundamental *fundamental = new ConcreteClassA;fundamental->templateMethod();delete fundamental;cout << "-------------- 华丽的分割线 --------------" << endl;Fundamental *concrete = new ConcreteClassB;concrete->templateMethod();delete concrete;getchar();return 0;
}

C++设计模式-模板方法模式相关推荐

  1. 在一个程序设计里,不同的功能窗口有着相似的功能实现方式,可采用设计模式---模板方法模式

        前段时间学习了一些设计模式,最近在做项目的过程中恰巧用到了其中的一个--模板方法模式.这个模式在程序设计过程中可是为小编省去了不少的代码量呢.具体是怎样应用的呢?接下来小编为您分享. 前面博文 ...

  2. 『设计模式』瑞幸咖啡还是星巴克,一杯下午茶让我明白 设计模式--模板方法模式(Template Method Pattern)

    23种设计模式+额外常用设计模式汇总 (持续更新) 简介 Define the skeleton of an algorithm in an operation,deferring some step ...

  3. 『设计模式』设计模式--模板方法模式

    23种设计模式+额外常用设计模式汇总 (持续更新) 简介 Define the skeleton of an algorithm in an operation,deferring some step ...

  4. 行为型设计模式---模板方法模式

    设计模式 序号 内容 链接地址 1 设计模式七大原则 https://blog.csdn.net/qq_39668819/article/details/115390615 2 创建型设计模式–工厂模 ...

  5. Java设计模式-模板方法模式详解

    Java设计模式-模板方法模式 文章目录 Java设计模式-模板方法模式 0.前言 1.模板方法原理 2.模板方法模式中的角色 3.模板方法模式的UML类图 4.代码实现 5.编码测试 6.模板模式中 ...

  6. Java设计模式 - 模板方法模式

    Java设计模式 - 模板方法模式 定义一个算法的骨架,并将一些步骤通过子类表达. UML图示 要点 1. 定义一个算法的骨架 - 建立一个抽象类 2. 将一些步骤通过子类表达 - 子类继承抽象类 赋 ...

  7. linkin大话设计模式--模板方法模式

    linkin大话设计模式--模板方法模式 准备一个抽象类,将部分逻辑以具体方法的形式实现,然后申明一些抽象方法来迫使子类实现剩余的逻辑.不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不 ...

  8. JAVA 设计模式 模板方法模式

    定义 模板方法模式 (Template Method) 定义了一个操作中的算法的骨架,而将部分步骤的实现在子类中完成. 模板方法模式使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤. 模 ...

  9. 模板设计模式_设计模式-模板方法模式

    一.模板方法模式的定义 在模板模式(Template Pattern)中,一个抽象类公开定义了执行它的方法的方式/模板.它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行.这种类型的设计 ...

  10. 大话设计模式—模板方法模式

    在模板方法模式(TemplateMethod Pattern)中,一个抽象类公开定义了执行它的方法的方式/模板.它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行.这种类型的设计模式属于 ...

最新文章

  1. exp()用法和点乘的原因
  2. WaitForMultipleObjects用法详解,一看就懂
  3. mfc中加logo以及背景图
  4. 5.Vue 计算属性和侦听器
  5. BCB6.0里没有TCppWebBrowser
  6. CSS3属性之resize
  7. php 隐藏 div 代码,在HTML里用CSS隐藏div的方法
  8. VS2008 安装部署工程的小问题
  9. mysql的体系架构和存储引擎
  10. ITIL 4: 培训与认证
  11. 妈妈!我也会做植物大战僵尸啦!
  12. python --opencv图像处理轮廓(寻找轮廓、绘制轮廓)详解
  13. 百度指数对网站优化有什么作用
  14. java机票编程_携程预订机票后台java开发编程
  15. Linux 网络编程-进程管道
  16. [NOIP模拟测试30]题解
  17. 如何在页面直接打开微信公众号
  18. 60分钟搞定JAVA加解密
  19. 数学建模 导航(持续更新ing)
  20. 中基鸿业低收入家庭如何理财

热门文章

  1. Oracle 摘去数据块的面纱
  2. 金山安全报告:二月漏洞频出 网站挂马猖獗
  3. 10个强大实用数据地图,不懂代码也能做!(附demo)
  4. 准备刺第一针了(飞秋官方下载)
  5. ZSKAME大白菜2013官网下载
  6. 有些人可能也在哪见过这样的HTML5效果
  7. 雷,大学教科书竟然使用番茄花园盗版系统
  8. 经典面试题(7):下面的代码运行结果是什么么?
  9. 薪酬最高十职位:工程师最吃香
  10. java1.9关键字_对 Java 9 把单个下划线作为关键字的猜想