原型模式(Prototype)
注:给出题目,首先能做的可能是先写出一个原始的方法的简单版本,然后再根据对设计模式的理解,按照对应设计模式来修改源代码。
1. 原型模式:
其实就是深拷贝与浅拷贝的实现。
2. 复制简历的代码实例:
第一版本代码:
class Resume
{
private:
string name;
string sex;
unsigned int age;
string time;
string company;
public:
Resume(string n)
{
name=n;
}
//设置个人信息
void SetPersonalInfo(string s,unsigned int a)
{
this->sex=s;
this->age=a;
}
void SetWorkExperience(string t,string com)
{
this->time=t;
this->company=com;
}
void display()
{
cout<<name<<":"<<sex<<" "<<age<<endl;
cout<<"工作经历:"<<time<<" "<<company<<endl;
}
};
int main()
{
Resume *a=new Resume("大鸟");
a->SetPersonalInfo("nan",29);
a->SetWorkExperience("1998-2000","XX公司");
Resume *b=a;
Resume *c=a;
a->display();
b->display();
c->display();
return 0;
}
第二版代码---原型模式:
class Resume
{
private:
string name,sex,age,timeArea,company;
public:
Resume(string s)
{
name=s;
}
void setPersonalInfo(string s,string a)
{
sex=s;
age=a;
}
void setWorkExperience(string t,string c)
{
timeArea=t;
company=c;
}
void display()
{
cout<<name<<" "<<sex<<" "<<age<<endl;
cout<<"工作经历: "<<timeArea<<" "<<company<<endl<<endl;
}
Resume *clone()
{
Resume *b;
b=new Resume(name);
b->setPersonalInfo(sex,age);
b->setWorkExperience(timeArea,company);
return b;
}
};
int main()
{
Resume *r=new Resume("李俊宏");
r->setPersonalInfo("男","26");
r->setWorkExperience("2007-2010","读研究生");
r->display();
Resume *r2=r->clone();
r2->setWorkExperience("2003-2007","读本科");
r->display();
r2->display();
return 0;
}