大话设计模式-原型模式

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

原型模式其实就是从一个对象在创建另外一个可定制的对象,而且不需要知道任何创建的细节。

浅拷贝和深拷贝:

浅拷贝:被拷贝对象的所有变量都含有与原来对象相同的值,而所有的对其他对象的引用都仍然指向原来的对象。

深拷贝:被拷贝对象的所有变量都含有与原来对象相同的值,把引用对象的变量指向复制过的新对象,而不是原来的被引用对象。

 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 }

 

posted @ 2018-04-19 19:52  头文件1991  阅读(257)  评论(0编辑  收藏  举报