c++ 设计模式之原型模式(二)

2014-11-24 12:30:40 · 作者: · 浏览: 4
se {
name = new char[strlen(str)+1];
strcpy(name, str);
}
}
ResumeA::~ResumeA() { delete [] name;}
ResumeA::ResumeA(const ResumeA &r) {
name = new char[strlen(r.name)+1];
strcpy(name, r.name);
}
ResumeA* ResumeA::clone() {
return new ResumeA(*this);
}
void ResumeA::show() {
cout<<"ResumeA name : "< }

ResumeB::ResumeB(const char *str)
{
if(str == NULL) {
name = new char[1];
name[0] = '\0';
}
else {
name = new char[strlen(str)+1];
strcpy(name, str); www.2cto.com
}
}
ResumeB::~ResumeB() { delete [] name;}
ResumeB::ResumeB(const ResumeB &r) {
name = new char[strlen(r.name)+1];
strcpy(name, r.name);
}
ResumeB* ResumeB::clone() {
return new ResumeB(*this);
}
void ResumeB::show() {
cout<<"ResumeB name : "< }

int main()
{
resume *r1 = new ResumeA("A");
resume *r2 = new ResumeB("B");
resume *r3 = r1->clone();
resume *r4 = r2->clone();
r1->show();
r2->show();
//删除r1,r2
delete r1;
delete r2;
r1 = r2 = NULL;
//深拷贝所以对r3,r4无影响
r3->show();
r4->show();
delete r3; delete r4;
r3 = r4 = NULL;

}

其实这个设计模式比较简单,我们总结一下具体操作步骤。

1、声明一个抽象基类,并定义clone()函数为纯虚函数。

2、实例化各个子类,并且实现复制构造函数,并实现clone()函数

摘自 lbqBraveheart的专栏