简介
在C++中,我们清楚有浅拷贝和深拷贝两种方式去复制一个对象;浅拷贝和深拷贝的主要区别是对指针拷贝的处理:浅拷贝是共享指针;而深拷贝各个对象均有自己的内存空间,是相互独立、互不干扰的。
在类中,有一个默认的拷贝构造函数,它是浅拷贝;若想实现深拷贝,则需要重写拷贝构造函数。而原型模式(prototype pattern)是一种创建型设计模型,允许一个对象创建另一个可定制的对象,并且不需要任何处理。
优点: 1.简化对象的创建,不需要关注其对象创建过程;2.可以在程序运行的时候复制一份相同的实例,两个实例之间互不干扰。
缺点: 1.用深拷贝时,代码实现可能比较复杂;2.必须有一个实例之后,才能使用clone。
- Prototype: 定义抽象接口;
- ConcretePrototypeA/B: 需要克隆的对象,需要实现clone()接口。
代码
class PrototypePattern {
public:
PrototypePattern();
explicit PrototypePattern(std::string& type);
explicit PrototypePattern(const PrototypePattern& prototypePattern);
~PrototypePattern() = default;
void show();
PrototypePattern* clone();
private:
std::string type_;
}; // PrototypePattern
PrototypePattern::PrototypePattern() {
this->type_ = "None";
}
PrototypePattern::PrototypePattern(std::string &type) {
this->type_ = type;
}
PrototypePattern::PrototypePattern(const patterns::PrototypePattern &prototypePattern) {
this->type_ = prototypePattern.type_;
}
void PrototypePattern::show() {
std::cout << this->type_ << std::endl;
}
PrototypePattern* PrototypePattern::clone() {
return new PrototypePattern(*this);
}
int main(){
std::string type = "test";
PrototypePattern* prototype = new patterns::PrototypePattern(type);
PrototypePattern* prototype_b = prototype->clone();
prototype_b->show();
prototype->show();
delete prototype;
delete prototype_b;
}