概念
此模式能够复制已有对象,而又无需使代码依赖它们所属的类。
代码
class Car
{
public :
virtual Car *Clone()
{
return new Car(*this);
}
};
class NuclearCar : public Car
{
public :
NuclearCar():Car(),WheelNumber(0){}
NuclearCar( const NuclearCar & car)//拷贝构造函数
{
WheelNumber = car .WheelNumber;
}
virtual Car * Clone()
{
return new NuclearCar (*this);//调用拷贝构造函数
}
private :
int WheelNumber;
};
int main(int argc, char *argv[])
{
NuclearCar * car = new NuclearCar;
Car * bp = car;
Car * bp2 = bp->Clone();
NuclearCar * car2 = static_cast<NuclearCar*>(bp2);
qDebug()<<(car2 == nullptr);//false
}
原型模式的特殊之处在于可以使用一个基类的指针拷贝得到一个派生类对象,拷贝构造函数则不行。