原型模式(浅复制和深复制)

来源:互联网 发布:淘宝店铺如何冲上销量 编辑:程序博客网 时间:2024/05/30 23:39

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

      Prototype原型模式是一种创建型设计模式,Prototype模式允许一个对象再创建另外一个可定制的对象,根本无需知道任何如何创建的细节,工作原理是:通过将一个原型对象传给那个要发动创建的对象,这个要发动创建的对象通过请求原型对象拷贝它们自己来实施创建。

      结构图如下:


      对于原型模式,又可分为浅复制和深复制。

     (1)浅复制:被赋值对象的变量都含有与原来变量相同的值,而所有的对其他对象的引用都仍然指向原来的对象

     (2)深复制:把引用对象的变量指向复制过来的新对象,而不是原有的被引用的对象

      下面是编写的一段深复制的代码:

#include <iostream>#include <string>using namespace std ;class WorkExperience     //工作经历类{string m_strTimeArea ;    //工作时区string m_strCompany ;     //工作地点public:void Setwork(string strTimeArea ,string strCompany)   //函数赋值{this->m_strTimeArea = strTimeArea ;this->m_strCompany = strCompany ;}string GetTimeArea(){return m_strTimeArea ;}string GetCompany(){return m_strCompany ;}};class Resume      //简历类{string m_strname ;   //名字string m_strsex ;    //性别string m_strage ;    //年龄WorkExperience * work ;public:Resume(){} ;Resume(string strname):m_strname(strname){} ;   //构造函数传入姓名void Setinformation(string strsex,string strage)  //设置性别年龄{this->m_strsex = strsex ;this->m_strage = strage ;work = new WorkExperience ;}void SetExperience(string strTimeArea ,string strCompany )  //设置工作经历{work->Setwork(strTimeArea,strCompany) ;}void Display()   //打印简历{cout<<m_strname<<"  "<<m_strsex<<"  "<<m_strage<<endl ;cout<<"工作经历:"<<work->GetTimeArea()<<"  "<<work->GetCompany()<<endl ;}Resume * Clone()   //克隆简历{Resume * temper = new Resume ;*temper = *this ;     //将this的所有值拷贝到temper(深复制),若要达到浅复制的效果,可在主函数中不修改信息,直接打印return temper ;}};int main(){Resume * pStudent1 = new Resume ("小欣") ;pStudent1->Setinformation("女","22") ;pStudent1->SetExperience("2017.10.1","360") ;pStudent1->Display();Resume * pStudent2 = pStudent1->Clone() ;pStudent2->Setinformation("女","23") ;pStudent2->SetExperience("2017.10.2","百度") ;pStudent2->Display();Resume * pStudent3 = pStudent1->Clone() ;pStudent3->Setinformation("女","24") ;pStudent3->SetExperience("2017.10.3","阿里巴巴") ;pStudent3->Display();return 0 ;}

运行结果为:

原创粉丝点击