设计模式笔记:原型模式

原型模式

是一种创建型设计模式,它用于创建重复的对象,同时又能保证性能。这种类型的设计模式提供了一种创建对象的最佳方式。这种模式涉及到一个原型类,该类负责创建对象的克隆。

在C++中,我们可以使用复制构造函数来实现原型模式。下面是一个简单的示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#include <iostream>

// 原型基类
class Prototype {
public:
virtual Prototype* clone() = 0; // 纯虚函数,由派生类实现
};

// 具体原型类
class ConcretePrototype : public Prototype {
private:
int m_value;

public:
// 构造函数
ConcretePrototype(int value) : m_value(value) {}

// 复制构造函数
ConcretePrototype(const ConcretePrototype& cp) : m_value(cp.m_value) {}

// 实现克隆方法,返回一个新的复制对象
Prototype* clone() override {
return new ConcretePrototype(*this);
}

// 输出值的方法,用于验证
void printValue() {
std::cout << "Value: " << m_value << std::endl;
}
};

int main() {
// 创建原型对象
ConcretePrototype* prototype = new ConcretePrototype(10);

// 克隆原型对象
ConcretePrototype* clonedPrototype = dynamic_cast<ConcretePrototype*>(prototype->clone());

// 输出原型和克隆对象的值
prototype->printValue();
clonedPrototype->printValue();

// 清理
delete prototype;
delete clonedPrototype;

return 0;
}

原型模式主要用于减少创建对象的开销,尤其是在创建大量重复对象时,通过复制已有对象来生成新对象,可以提高性能。

设计模式23模式介绍_设计模式_哪 吒-Eolink 开发者社区 (csdn.net)

补充更新:

原型模式可以根据需求更加灵活的使用。灵活决定拷贝哪些内部属性。

说明:

  1. 浅拷贝: 将原对象或原数组的引用直接赋给新对象,新数组,新对象/数组只是原对象的一个引用
  2. 深拷贝: 创建一个新的对象和数组,将原对象的各项属性的“值”(数组的所有元素)拷贝过来,是“值”而不是“引用”

浅拷贝只是对指针的拷贝,拷贝后两个指针指向同一个内存空间,深拷贝不但对指针进行拷贝,而且对指针指向的内容进行拷贝,经深拷贝后的指针是指向两个不同地址的指针。