0


原型模式~

现实世界的例子

    还记得多莉吗?那只被克隆的羊!我们不必深究细节,但关键点是这都与克隆有关。

用简单的话来说

    基于现有对象通过克隆来创建新对象。

维基百科解释

    原型模式是一种在软件开发中的创建型设计模式。当要创建的对象类型由原型实例确定时,就会用到它,这个原型实例会被克隆以产生新对象。

    简而言之,它允许你创建现有对象的一个副本,并根据需要进行修改,而不是从头开始创建一个对象并进行设置。

编程示例

#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
版权归原作者 阳光开朗_大男孩儿 所有, 如有侵权,请联系我们删除。

“原型模式~”的评论:

还没有评论