原型模式,简单说就是具有一个克隆方法,外部可以直接使用此方法得到相应对象的拷贝对象。

比如哆啦A梦的复制镜,一照,就把物品拷贝了一份(虽然是镜子复制是相反的,这里就忽略这个细节了)

C++中依靠拷贝构造函数来得到拷贝。

  1. IPrototype* CPrototype::Clone() const
  2. {
  3. return new CPrototype(*this);
  4. }

C#中浅拷贝依靠MemberwiseClone来实现,深拷贝需要自己实现,依靠 [Serializable]、MemoryStream或者简单的new新对象,然后复制值。

  1. public CPrototype Clone()
  2. {
  3. return this.MemberwiseClone() as CPrototype;
  4. }

C++示例

IPrototype.h

  1. #pragma once
  2. class IPrototype
  3. {
  4. public:
  5. IPrototype(void);
  6. virtual ~IPrototype(void);
  7. public:
  8. virtual IPrototype* Clone() const = ;
  9. };

IPrototype.cpp

  1. #include "IPrototype.h"
  2.  
  3. IPrototype::IPrototype(void)
  4. {
  5. }
  6.  
  7. IPrototype::~IPrototype(void)
  8. {
  9. }

Prototype.h

  1. #pragma once
  2. #include "iprototype.h"
  3. class CPrototype :
  4. public IPrototype
  5. {
  6. public:
  7. CPrototype(void);
  8. CPrototype(const CPrototype& cp);
  9. CPrototype operator =(const CPrototype& cp);
  10. ~CPrototype(void);
  11. public:
  12. IPrototype* Clone() const;
  13. private:
  14. int a;
  15. };

Prototype.cpp

  1. #include "Prototype.h"
  2.  
  3. CPrototype::CPrototype(void)
  4. {
  5. }
  6.  
  7. CPrototype::~CPrototype(void)
  8. {
  9. }
  10.  
  11. CPrototype::CPrototype(const CPrototype& cp)
  12. {
  13. this->a = cp.a;
  14. }
  15.  
  16. CPrototype CPrototype::operator=(const CPrototype& cp)
  17. {
  18. this->a = cp.a;
  19. return *this;
  20. }
  21.  
  22. IPrototype* CPrototype::Clone() const
  23. {
  24. return new CPrototype(*this);
  25. }

main.cpp

  1. #include "Prototype.h"
  2. #include <iostream>
  3.  
  4. int main()
  5. {
  6. IPrototype* p1 = new CPrototype();
  7. IPrototype* p2 = p1->Clone();
  8. return ;
  9. }

学习笔记——原型模式Prototype的更多相关文章

  1. 设计模式学习心得<原型模式 Prototype >

    原型模式(Prototype Pattern)是用于创建重复的对象,同时又能保证性能.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式. 这种模式是实现了一个原型接口,该接口用于创建当 ...

  2. 设计模式 笔记 原型模式 prototype

    //---------------------------15/04/07---------------------------- //prototype 原型模式--对象创建型模式 /* 1:意图: ...

  3. C#学习笔记-原型模式

    题目:编写基本的简历. 实现: 创建基本的Resume类,然后主函数通过实例化Resume来写简历即可. Resume类: class Resume { private string name; pr ...

  4. 设计模式学习之原型模式(Prototype,创建型模式)(5)

    通过序列化的方式实现深拷贝 [Serializable] public class Person:ICloneable { public string Name { get; set; } publi ...

  5. 设计模式系列之原型模式(Prototype Pattern)——对象的克隆

    说明:设计模式系列文章是读刘伟所著<设计模式的艺术之道(软件开发人员内功修炼之道)>一书的阅读笔记.个人感觉这本书讲的不错,有兴趣推荐读一读.详细内容也可以看看此书作者的博客https:/ ...

  6. Net设计模式实例之原型模式( Prototype Pattern)

    一.原型模式简介(Brief Introduction) 原型模式(Prototype Pattern):用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象. Specify the kin ...

  7. 二十四种设计模式:原型模式(Prototype Pattern)

    原型模式(Prototype Pattern) 介绍用原型实例指定创建对象的种类,并且通过拷贝这个原型来创建新的对象.示例有一个Message实体类,现在要克隆它. MessageModel usin ...

  8. 设计模式(四)原型模式Prototype(创建型)

      设计模式(四)原型模式Prototype(创建型) 1.   概述 我们都知道,创建型模式一般是用来创建一个新的对象,然后我们使用这个对象完成一些对象的操作,我们通过原型模式可以快速的创建一个对象 ...

  9. 乐在其中设计模式(C#) - 原型模式(Prototype Pattern)

    原文:乐在其中设计模式(C#) - 原型模式(Prototype Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 原型模式(Prototype Pattern) 作者:weba ...

随机推荐

  1. javascript动画效果之任意效果任意值

    通过学习,我发现当同一个ul下的li标签如果想要不同的效果,那怎么办? 比如第一个li是width变化,第二个li为透明度(opacity)变化,而opacity的值和width的值类型不同,不能通用 ...

  2. 在CentOS7部署zookeeper集群以及简单API使用

    一.部署zookeeper集群 zookeeper是一个针对大型分布式系统的协调系统,提供的功能有统一名称服务.分布式同步等. 1.上传zk安装包 2.解压     tar -xzvf zookeep ...

  3. Windows命令查看文件MD5码

    D:\>certutil -hashfile md5test.txt MD5 MD5 哈希(文件 md5test.txt): d6 f6 bb 38 b5 6b 67 8f 34 9b e4 d ...

  4. sql 生成开始日期到结束日期与开始日期的相差天数

     SELECT    CONVERT(VARCHAR(10), DATEADD(dd, number, '2015-10-25'), 120) AS dtDate          FROM      ...

  5. linex下部署发布web项目

    准备工作:通过Xmanager远程连接linux系统,下载对应的jdk和tomcat. 1.通过Xmanager远程连接linux系统,下载地址请自己网上搜索吧. 2.下载jdk (这里为jdk-7u ...

  6. iosiOSlabel基本使用以及文字自适应

    (如果需要的不是使用的属性值如换行形式,可以把对应的属性在程序中书写然后按"command"+鼠标左键点击就可以查看所有属性值) 一label基本设置 self.view.back ...

  7. C++编写一个简单的DLL

    什么是DLL: 自从微软推出16位的Windows操作系统起,此后每种版本的Windows操作系统都非常依赖于动态链接库(DLL)中的函数和数据,实际上 Windows操作系统中几乎所有的内容都由DL ...

  8. Windows常用的监视数据指标

  9. python datetime时间差

    import datetime import time d1 = datetime.datetime(2005, 2, 16) d2 = datetime.datetime(2004, 12, 31) ...

  10. PHP 5 数据类型

    本页内容来自http://www.runoob.com/php/php-datatypes.html String(字符串), Integer(整型), Float(浮点型), Boolean(布尔型 ...