原型模式

来源:互联网 发布:比尔盖茨书单 知乎 编辑:程序博客网 时间:2024/04/19 20:11

简介

原型模式:

用原型实例制定创建对象的种类,并且通过拷贝这些原型创建新的对象。

常用的场景

基本就是你需要从A的实例得到一份与A内容相同,但是又互不干扰的实例的话,就需要使用原型模式。

优点

1.使用拷贝模式比直接new一个对象的开销要小的多。

2.可以在程序运行时(对象属性发生了变化),得到一份内容相同的实例,但之间还不会相互干扰。

缺点

涉及的知识点

浅拷贝:就是给对象中的每个成员变量进行复制,就是把A1类中的变量直接赋给A2类中变量,属于值传递,但是涉及到有new之类内存分配的地方,他们却是共享内存的。

深拷贝:就是不仅使用值传递,而是要每个变量都有自己一份独立的内存空间,互不干扰。

默认的拷贝构造函数是浅拷贝的,如果要实现深拷贝,就需要重写拷贝构造函数T(const T&)

 

测试代码

 

#include <iostream>#include <assert.h>using namespace std;//原型类class FBookProtoType{public:FBookProtoType(){};~FBookProtoType(){};int name;int price;int num;//深拷贝FBookProtoType* deepClone(){FBookProtoType* pItem = new FBookProtoType();pItem->name = this->name;pItem->price = this->price;pItem->num = this->num;return pItem;}//浅拷贝FBookProtoType* shallowClone(){FBookProtoType* pItem = this;return pItem;}};void main(){FBookProtoType* pData = new FBookProtoType();pData->name = 1;pData->price = 1;pData->num = 1;FBookProtoType* pDeep = pData->deepClone();FBookProtoType* pShadow = pData->shallowClone();free(pData);pData = 0;assert(pDeep != 0);assert(pShadow == 0);system("PAUSE");}

原创粉丝点击