一、简介

原型模式可以用于创建重复的对象,同时又能保证性能。原型模式是一种创建型模式,提供一种创建对象的最佳方式。

二、原型模式实例

某小学要在六一儿童节这天公布一批三好学生,需要一批奖状。我们知道,三好学生的奖状上一般除了班级姓名其他都是相同的内容。在这种情景下,学校只需要设计一张奖状原型出来,剩余奖状都可以进行拷贝和简单的变更。

这个情景就非常适合使用原型模式解决。

1)原型类-奖状类,提供克隆自己的接口clone,用于返回克隆了自身属性的新对象指针

class Cert
{
public://构造函数Cert() {}//拷贝构造函数Cert(Cert* cert){_printing = cert->_printing;_text = cert->_text;_studentName = cert->_studentName;}void SetCert(string printing, string text){_printing = printing;_text = text;}//设置学生姓名void SetStudentName(string name){_studentName = name;}void show(){cout << "这张奖状的印花:" << _printing << endl;cout << "这张奖状的文本:" << _text << endl;cout << "这张奖状发给谁:" << _studentName << endl;}//克隆接口Cert* clone(){return new Cert(*this);}private:string _printing; //印花string _text; //奖状文本string _studentName; //学生名字
};

2)使用

int main(int argc, char *argv[])
{//老师选择制作一张奖状,作为张三的奖状Cert *certA = new Cert();certA->SetCert("三好学生印花", "恭喜获得本学期三好学生,望继续努力!");certA->SetStudentName("张三");certA->show();cout << endl;//老师复制了张三的奖状,只需要把名字改成李四Cert *certB = certA->clone();certB->SetStudentName("李四");certB->show();
}

可见,certB是certA的克隆对象,除了一些定制的内容(学生姓名),其他都不需要再次调用SetCert设置奖状细节。既不容易出错,又减少了程序的复杂度,同时,由于不用反复调用填充对象的属性,提高了程序的效率。

设计模式-原型模式C++相关推荐

  1. 设计模式 原型模式_创新设计模式:原型模式

    设计模式 原型模式 原型模式用于创建对象的副本. 这种模式非常有用,特别是当从头开始创建对象的成本很高时. 与builder , factory和abstract factory模式相比,它不会从头开 ...

  2. 设计模式 原型模式_设计模式:原型

    设计模式 原型模式 创新设计模式之一是原型设计模式 . 尽管原型是创造模式,但它在概念上与其他模式有所区别. 我的意思是原型在某种意义上创造了自己. 我将在下面解释. 原型模式的所有魔力都基于Java ...

  3. 设计模式 原型模式_原型设计模式:创建另一个小车

    设计模式 原型模式 创建对象确实是一个耗时的过程,也是一件昂贵的事情. 因此,我们现在正冒险节省时间和金钱. 我们该怎么做? 克隆奇迹多莉 有人记得多莉吗? 是的,是绵羊,是第一个被克隆的哺乳动物. ...

  4. Java常用设计模式————原型模式(一)

    介绍 原型模式(Prototype Pattern):用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象. 原型模式用于创建重复的对象,同时又能保证性能.当直接创建对象的代价比较大时,则采用 ...

  5. 第六章 Caché 设计模式 原型模式

    文章目录 第六章 Caché 设计模式 原型模式 定义 使用场景 优点 结构图 描述 示例 初级写法 缺点 中级写法 缺点 高级写法 (浅复制) 浅复制 深复制 完整示例 简历类(复制类) 对象类(工 ...

  6. C++设计模式——原型模式(Prototype Pattern)

    C++设计模式--原型模式(Prototype Pattern) 微信公众号:幼儿园的学霸 目录 文章目录 C++设计模式--原型模式(Prototype Pattern) 目录 定义 代码示例 普通 ...

  7. 设计模式---原型模式(Prototype Pattern)

    在编程中有时候我们会发现,当我们需要一个实例,可是这个实例的创建过程十分复杂,在执行过程中 会消耗大量的时间,同时创建第一个实例和创建第二个时间的初始化信息并未改变.在此种情况下,直接New 一个实例 ...

  8. 精通python设计模式-浅谈Python设计模式 - 原型模式

    声明,本系列文章主要参考<精通Python设计模式>一书,并且参考一些资料,结合自己的一些看法来总结而来. 在<精通Python设计模式>中把设计模式分为三种类型: 创建型模式 ...

  9. [设计模式]原型模式

    简介 原型模式 (Prototype)用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象. 原型模式是一种对象创建型模式 (可参考 设计模式 创建型模式). 结构 图-原型模式结构图 Pr ...

  10. Java设计模式——原型模式

    概述 原型模式是为了解决一些不必要的对象创建过程.当Java JDK中提供了Cloneable接口之后,原型模式就变得异常的简单了.虽然由于Cloneable的引入使用程序变得更简单了,不过还是有一些 ...

最新文章

  1. 【剑指offer-Java版】46求 1 + 2 + 3 + ... + n
  2. linux snap安装redis-desktop-manager
  3. 如何使用java程序操作ActiveMQ
  4. 教你用Python合成人像,足不出户游遍全球!
  5. 1562: 比较大小(思维)
  6. jvm加载class原理
  7. VS2008下QT开发环境搭建
  8. C++提高部分_C++普通函数与函数模板调用规则---C++语言工作笔记085
  9. 运算符优先级(cpp/c)
  10. Javashop 7.0 商城Https协议修改部分
  11. 趣图:秃头程序员一问二十岁
  12. exe文件修复,关于logo1_exe“威金”变种病毒的探讨
  13. 怎么调用计算机任务管理器,任务管理器怎么打开
  14. 微型计算机日常的应用领域,计算机的应用领域有哪些?
  15. 2023最新SSM计算机毕业设计选题大全(附源码+LW)之java小型超市货物仓储管理系统w8wry
  16. NR系统概述-架构与演进
  17. 央行超级网银8月上线;Win7市场份额突破10%(每日关注2010.4.2)
  18. 单TYPE-C口 可支持快充又可传输USB2.0数据方案
  19. Android 面部识别之二(调用开源面部识别算法seetaface检测)
  20. 关于ARM Kinetis MCU唤醒源NVIC和AWIC的工作过程解惑

热门文章

  1. python opencv 直方图均衡_OpenCV-Python教程(10、直方图均衡化)
  2. asp.net 将中文翻译成拼音(VS2008)
  3. Fiddle抓包工具使用
  4. Fping的基本使用
  5. QT QTextEdit添加文字的方式
  6. 深谈德国车和日本车的区别--觉得分析的还算冷静客观
  7. JDBC中executeQuery、executeUpdate和execute之间的区别
  8. Google Earth Engine学习笔记(一)
  9. CRF++安装教程(含Windows和Linux两个版本)
  10. 静态库与动态库之间的区别