大话设计模式-原型模式
原型模式:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。
原型模式其实就是从一个对象在创建另外一个可定制的对象,而且不需要知道任何创建的细节。
浅拷贝和深拷贝:
浅拷贝:被拷贝对象的所有变量都含有与原来对象相同的值,而所有的对其他对象的引用都仍然指向原来的对象。
深拷贝:被拷贝对象的所有变量都含有与原来对象相同的值,把引用对象的变量指向复制过的新对象,而不是原来的被引用对象。
1 // Clone.cpp : 定义控制台应用程序的入口点。 2 // 3 4 #include "stdafx.h" 5 #include <string> 6 #include <iostream> 7 8 using namespace std; 9 10 class WorkExperience{ 11 public: 12 void setData(string data){ 13 this->data = data; 14 } 15 string getData(){ 16 return this->data; 17 } 18 void setCom(string com){ 19 this->com = com; 20 } 21 string getCom(){ 22 return com; 23 } 24 private: 25 string data; 26 string com; 27 }; 28 class Resume{ 29 30 public: 31 Resume(string name){ 32 this->name = name; 33 work = new WorkExperience(); 34 } 35 Resume(WorkExperience *work){ 36 this->work = work; 37 } 38 void setPersonInfo(string sex,int age){ 39 this->age = age; 40 this->sex = sex; 41 } 42 void setWorkEx(string data,string com){ 43 work->setData(data); 44 work->setCom(com); 45 } 46 void Display(){ 47 48 cout<<"name= "<<name<<" "; 49 cout<<"sex= "<<sex<<" "; 50 cout<<"age= "<<age<<endl; 51 cout<<"工作经历: data="<< work->getData() << " 公司 "<<work->getCom()<<endl; 52 } 53 void *Clone(){ 54 Resume *obj = new Resume(this->work); 55 obj->sex = this->sex; 56 obj->name = this->name; 57 obj->age = this->age; 58 return obj; 59 } 60 private: 61 string name; 62 string sex; 63 int age; 64 WorkExperience *work; 65 66 67 }; 68 int _tmain(int argc, _TCHAR* argv[]) 69 { 70 Resume *a = new Resume("zjx"); 71 a->setPersonInfo("男",27); 72 a->setWorkEx("2018","11"); 73 a->Display(); 74 75 Resume *b=(Resume*)a->Clone(); 76 b->setWorkEx("2001","22"); 77 b->Display(); 78 return 0; 79 }