原型模式
class Record{
public:
virtual void print() = 0;
virtual Record* clone() = 0;
};
class CarRecord : public Record{
public:
CarRecord(string name){
this->name = name;
}
virtual Record* clone(){
Record* ptr = new CarRecord(name);
return ptr;
}
virtual void print(){
cout << "name: " << name << endl;
}
public:
string name;
};
int main(){
Record* car_1 = new CarRecord("aaa");
car_1->print();
Record* car_2 = car_1->clone();
car_2->print();
return 0;
}
为什么不用new直接创建对象,而要用原型模式?
基类指针指向派生类对象,怎样用基类指针创建一个新的派生类对象?? 用基类的拷贝构造函数显然不行。
原型模式生成的新对象可能是一个派生类。拷贝构造函数生成的新对象只能是类本身。原型模式是描述了一个通用方法(或概念),它不管是如何实现的,而拷贝构造则是描述了一个具体实现方法。