学习笔记——原型模式Prototype
2024-10-18 23:29:36
原型模式,简单说就是具有一个克隆方法,外部可以直接使用此方法得到相应对象的拷贝对象。
比如哆啦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 ;
}
最新文章
- Collection接口
- Web前端性能优化教程03:添加Expires头
- css定位的简单总结
- hadoop是什么?
- QT 焦点事件(4种方式的解释,还有委托焦点)
- (10.09作业)学生选课数据库SQL语句练习题
- rtsp的东西
- Python3 如何优雅地使用正则表达式(详解五)
- (转载)C++之tinyXML使用
- View实现涂鸦、撤销以及重做功能
- Android数据存储——SQLite数据库(模板)
- C#与Arduino通过串口通信来控制LED灯的状态
- 关于VS2010编译警告LNK4221
- jQuery插件,将内容插入到光标处
- Dynamics CRM2016 Web API获取实体元数据Picklist属性的Text&;Value
- linux磁盘管理系列二:软RAID的实现
- rabbitmq 日志存储路径
- 机器学习笔记(三)Logistic回归模型
- Django 缓存、序列化、信号
- Blender Python脚本的6个技巧
热门文章
- Openjudge-计算概论(A)-DNA排序
- WPFbutton样式
- 12C CLONE PDB and config service_listener
- Android闪光灯操作
- FZU 1502 Letter Deletion
- 《Windows驱动开发技术详解》之自定义StartIO
- 只能在执行 Render() 的过程中调用 RegisterForEventValidation
- java 线程池 并行 执行
- find the closest sum to a target value
- org.hibernate.exception.JDBCConnectionException: could not execute query