现实世界的例子
还记得多莉吗?那只被克隆的羊!我们不必深究细节,但关键点是这都与克隆有关。
用简单的话来说
基于现有对象通过克隆来创建新对象。
维基百科解释
原型模式是一种在软件开发中的创建型设计模式。当要创建的对象类型由原型实例确定时,就会用到它,这个原型实例会被克隆以产生新对象。
简而言之,它允许你创建现有对象的一个副本,并根据需要进行修改,而不是从头开始创建一个对象并进行设置。
编程示例
#include <iostream>
#include <string>
using namespace std;
class Sheep {
private:
string name;
string category;
public:
// 构造函数,设置初始值
Sheep(const string& name, const string& category = "Mountain Sheep")
: name(name), category(category) {}
// 设置名称
void setName(const string& newName) {
name = newName;
}
// 获取名称
string getName() const {
return name;
}
// 设置类别
void setCategory(const string& newCategory) {
category = newCategory;
}
// 获取类别
string getCategory() const {
return category;
}
// 克隆当前对象(实现深拷贝)
Sheep* clone() const {
return new Sheep(*this); // 使用复制构造函数
}
};
int main() {
// 创建一个原始对象
Sheep* original = new Sheep("Jolly");
cout << "Original Name: " << original->getName() << endl; // Jolly
cout << "Original Category: " << original->getCategory() << endl; // Mountain Sheep
// 克隆并修改克隆对象的名称
Sheep* cloned = original->clone();
cloned->setName("Dolly");
cout << "Cloned Name: " << cloned->getName() << endl; // Dolly
cout << "Cloned Category: " << cloned->getCategory() << endl; // Mountain Sheep
// 释放内存
delete original;
delete cloned;
return 0;
}
运行输出
Original Name: Jolly
Original Category: Mountain Sheep
Cloned Name: Dolly
Cloned Category: Mountain Sheep
何时使用?
当需要一个与现有对象相似的新对象时,或者当创建新对象的成本相比克隆而言较高时。
本文转载自: https://blog.csdn.net/qq_43287763/article/details/143104523
版权归原作者 阳光开朗_大男孩儿 所有, 如有侵权,请联系我们删除。
版权归原作者 阳光开朗_大男孩儿 所有, 如有侵权,请联系我们删除。