大话设计模式--模板方法模式 TemplateMethod -- C++ 实现

时间:2021-04-24 23:52:35

1. 模板方法模式: 定义一个操作中的算法骨架,而将一些操作延迟到子类,

模板方法模式使得子类可以不改变一个算法的结构既可以重定义该算法的某些特定步骤。

大话设计模式--模板方法模式 TemplateMethod -- C++ 实现

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

模板方法模式就是提供一个很好的代码复用平台。

实例:

template.h template.cpp 模板

#ifndef TEMPLATE_H
#define TEMPLATE_H class Template
{
public:
Template();
void templateMethod(); //模板方法
void virtual primitiveOperation1(); //可变操作1
void virtual primitiveOperation2(); //可变操作2
}; #endif // TEMPLATE_H
#include "template.h"
#include <iostream>
using namespace std; Template::Template()
{
} void Template::templateMethod()
{
cout << " templateMethod ... ... " << endl;
primitiveOperation1();
primitiveOperation2();
} void Template::primitiveOperation1()
{} void Template::primitiveOperation2()
{}

concretetemplate.h concretetemplate.cpp 模板实例,有不同可变操作。。

#ifndef CONCRETETEMPLATE_H
#define CONCRETETEMPLATE_H #include "template.h" class Concretetemplate : public Template
{
public:
Concretetemplate();
void primitiveOperation1();
void primitiveOperation2();
}; #endif // CONCRETETEMPLATE_H
#include "concretetemplate.h"
#include <iostream>
using namespace std; Concretetemplate::Concretetemplate()
{
} void Concretetemplate::primitiveOperation1()
{
cout << "primitiveOperation1" << endl;
} void Concretetemplate::primitiveOperation2()
{
cout << "primitiveOperation2" << endl;
}

main.cpp   可以实例更多的concretetemplate,更多的模板子类

#include <iostream>
#include "concretetemplate.h"
#include "template.h"
using namespace std; int main()
{
cout << "Template Method!" << endl; Template *temp = new Concretetemplate();
temp->templateMethod(); return 0;
}

大话设计模式--模板方法模式 TemplateMethod -- C++ 实现的更多相关文章

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

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

  2. 设计模式——模板方法模式&lpar;TemplateMethod Pattern&rpar;

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

  3. javascript设计模式——模板方法模式

    前面的话 在javascript开发中用到继承的场景其实并不是很多,很多时候喜欢用mix-in的方式给对象扩展属性.但这不代表继承在javascript里没有用武之地,虽然没有真正的类和继承机制,但可 ...

  4. linkin大话设计模式--常用模式总结

    linkin大话设计模式--常用模式总结 一,常用设计模式定义 Abstract Factory(抽象工厂模式):提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类. Adapter( ...

  5. linkin大话设计模式--建造模式

    linkin大话设计模式--建造模式 建造模式是对象的创建模式,可以讲一个产品的内部表象与产品的生成过程分割开来,从而可以使一个建造过程生成具有不同的内部表象的产品对象. 建造模式的结构: 抽象建造者 ...

  6. linkin大话设计模式--桥接模式

    linkin大话设计模式--桥接模式 桥接模式是一种结构化模式,他主要应对的是:由于实际的需要,某个类具有2个或者2个以上维度的变化,如果只是使用继承将无法实现功能,或者会使得设计变得相当的臃肿.我们 ...

  7. linkin大话设计模式--门面模式

    linkin大话设计模式--门面模式 随着系统的不断改进和开发,他们会变得越来越复杂,系统会生成大量的类,这使得程序的流程更加难以理解.门面模式可以为这些类提供一个简易的接口,从而简化访问这些类的复杂 ...

  8. linkin大话设计模式--策略模式

    linkin大话设计模式--策略模式 Strategy [ˈstrætədʒi]  策略 策略模式用于封装系列的算法,这些算法通常被封装在一个称为Context的类中,客户端程序可以*的选择任何一种 ...

  9. linkin大话设计模式--命令模式

    linkin大话设计模式--命令模式 首先考虑一种应用情况,某个方法需要完成某一个功能,这个功能的大部分功能已经确定了,但是有可能少量的步骤没法确定,必须等到执行这个方法才可以确定. 也就是说,我们写 ...

随机推荐

  1. 【翻译十八】java-并发之锁对象

    Lock Objects Synchronized code relies on a simple kind of reentrant lock. This kind of lock is easy ...

  2. JavaScript:window窗口对象

    在JavaScript中,window表示的就是一个窗口对象.所以在整个处理过程之中,所有的操作都是以弹框为主 的.范例1:使用警告框 <script type="text/javas ...

  3. windows7旗舰版激活密钥永久版免费分享

    windows7之家不仅提供精品Win7教程 给大家,加上这个windows7激活密匙还帮大家解决windows7系统激活问题,包括win7旗舰版 windows7安装版这些. 用的是Windows7 ...

  4. 为什么设计模式在C&plus;&plus;社区没有Java社区流行&quest;

    我们发现设计模式在Java社区很流行,但是在C++社区却没有那么被关注,甚至有点被排斥,究竟是什么原因造成这个差异的呢?    昨天和同事讨论这个问题,最后得出几点原因:     (1)C++内存需要 ...

  5. SQL Server 2008空间数据应用系列七:基于Bing Maps&lpar;Silverlight&rpar; 的空间数据展现

    原文:SQL Server 2008空间数据应用系列七:基于Bing Maps(Silverlight) 的空间数据展现 友情提示,您阅读本篇博文的先决条件如下: 1.本文示例基于Microsoft ...

  6. C&num; 根据年月获得此月第一天和最后一天,并计算工作日

    string str = "2015年3月"; ); ); , secondIndex - firstIndex - ); , ); DateTime dt = DateTime. ...

  7. HDU2282 Chocolate KM算法

    第一次做这样的题,其中有几个细节是反复思考反复调试,最后一A的,ORZ,又加深了对KM算法的理解.能不参考网上的题解,而是平静下来思考,参透,最后敢于尝试.....真的很重要,以后遇到才会有更深的印象 ...

  8. c&plus;&plus;项目范例

    #include<iostream> #include<string.h> #include<stdlib.h> using namespace std; clas ...

  9. windows 下安装redis

    https://github.com/MicrosoftArchive/redis/releases redis 服务安装到系统 redis-server.exe --service-install ...

  10. JS中的&OpenCurlyDoubleQuote;&equals;&equals;”符号及布尔值转换规则

    what are the rules for how == converts types? 关于"=="的比较规则: 1. Comparing numbers and string ...