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

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

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

IPrototype* CPrototype::Clone() const
{
return new CPrototype(*this);
}

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

        public CPrototype Clone()
{
return this.MemberwiseClone() as CPrototype;
}

C++示例

IPrototype.h

 #pragma once
class IPrototype
{
public:
IPrototype(void);
virtual ~IPrototype(void);
public:
virtual IPrototype* Clone() const = ;
};

IPrototype.cpp

 #include "IPrototype.h"

 IPrototype::IPrototype(void)
{
} IPrototype::~IPrototype(void)
{
}

Prototype.h

 #pragma once
#include "iprototype.h"
class CPrototype :
public IPrototype
{
public:
CPrototype(void);
CPrototype(const CPrototype& cp);
CPrototype operator =(const CPrototype& cp);
~CPrototype(void);
public:
IPrototype* Clone() const;
private:
int a;
};

Prototype.cpp

 #include "Prototype.h"

 CPrototype::CPrototype(void)
{
} CPrototype::~CPrototype(void)
{
} CPrototype::CPrototype(const CPrototype& cp)
{
this->a = cp.a;
} CPrototype CPrototype::operator=(const CPrototype& cp)
{
this->a = cp.a;
return *this;
} IPrototype* CPrototype::Clone() const
{
return new CPrototype(*this);
}

main.cpp

 #include "Prototype.h"
#include <iostream> int main()
{
IPrototype* p1 = new CPrototype();
IPrototype* p2 = p1->Clone();
return ;
}

最新文章

  1. Collection接口
  2. Web前端性能优化教程03:添加Expires头
  3. css定位的简单总结
  4. hadoop是什么?
  5. QT 焦点事件(4种方式的解释,还有委托焦点)
  6. (10.09作业)学生选课数据库SQL语句练习题
  7. rtsp的东西
  8. Python3 如何优雅地使用正则表达式(详解五)
  9. (转载)C++之tinyXML使用
  10. View实现涂鸦、撤销以及重做功能
  11. Android数据存储——SQLite数据库(模板)
  12. C#与Arduino通过串口通信来控制LED灯的状态
  13. 关于VS2010编译警告LNK4221
  14. jQuery插件,将内容插入到光标处
  15. Dynamics CRM2016 Web API获取实体元数据Picklist属性的Text&amp;Value
  16. linux磁盘管理系列二:软RAID的实现
  17. rabbitmq 日志存储路径
  18. 机器学习笔记(三)Logistic回归模型
  19. Django 缓存、序列化、信号
  20. Blender Python脚本的6个技巧

热门文章

  1. Openjudge-计算概论(A)-DNA排序
  2. WPFbutton样式
  3. 12C CLONE PDB and config service_listener
  4. Android闪光灯操作
  5. FZU 1502 Letter Deletion
  6. 《Windows驱动开发技术详解》之自定义StartIO
  7. 只能在执行 Render() 的过程中调用 RegisterForEventValidation
  8. java 线程池 并行 执行
  9. find the closest sum to a target value
  10. org.hibernate.exception.JDBCConnectionException: could not execute query