设计模式之Prototype模式

作用:用原型实例指定创建对象的种类,通过拷贝这些原型创建新的对象而无需通过实例化类。这种模式适用于创建成本较高的对象,或者需要大量相似对象的情况。

实现

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
#include <iostream>
#include <string>

// 原型基类
class Prototype {
public:
virtual Prototype* clone() = 0;
virtual void printInfo() = 0;
};

// 具体原型类
class ConcretePrototype : public Prototype {
private:
std::string info;

public:
ConcretePrototype(std::string info) : info(info) {}

Prototype* clone() {
return new ConcretePrototype(*this);
}

void printInfo() {
std::cout << "Info: " << info << std::endl;
}
};

int main() {
// 创建原型对象
ConcretePrototype prototype("Prototype");

// 克隆原型对象
Prototype* clone = prototype.clone();

// 输出原型对象和克隆对象的信息
prototype.printInfo();
clone->printInfo();

delete clone;

return 0;
}

在上面的示例中,我们定义了一个Prototype基类和一个ConcretePrototype具体原型类。Prototype基类定义了clone()printInfo()纯虚函数,ConcretePrototype类实现了这些函数。

main()函数中,我们首先创建了一个原型对象prototype,然后通过调用clone()函数克隆了一个新对象clone。最后,我们分别调用原型对象和克隆对象的printInfo()函数来输出它们的信息。

1
2
Info: Prototype
Info: Prototype