Prototype模式——简单理解就是新对象的创建可以通过已有对象进行创建。
Prototype模式提供了一个通过已存在对象进行新对象创建的接口Clone
,Clone
实现和具体的实现语言相关,在C++中通过拷贝构造函数实现。
原型模式通过复制原型而获得新对象的创建功能,能够生产对象,让我们想起了工厂模式。实际上原型模式、建造者模式、工厂模式都是通过一个类(对象实例)来专门负责对象的创建工作(工厂对象),它们之间的区别是:建造者模式重在复杂对象的一步步创建(并不直接返回对象),工厂模式重在产生多个互相依赖的对象,而原型模式重在从自身复制自己创建新类。
代码示例(C++)
Ptototype模式的实质就是创建一个单独的接口Clone
,由这个接口实现复制已存在的对象。不通过接口的话也可以实现复制对象,这就要我们重写拷贝构造函数。例如:
std::string s="124";
std::string s1(s);
在原型模式中,将拷贝构造函数封装成一个接口,实现复制对象的功能。代码示例如下:
#include<iostream>
using namespace std;
class Prototype
{
public:
virtual ~Prototype(){}
virtual Prototype* Clone() const = 0; //原型模式,最核心的抽象,凡是原型模式必须实现该抽象
protected:
Prototype(){}
};
class ConcretePrototype:public Prototype
{
public:
ConcretePrototype(){}
ConcretePrototype(const ConcretePrototype& obj)
{
cout << "拷贝构造,注意深拷贝,浅拷贝的问题
";
}
~ConcretePrototype(){}
Prototype* Clone()const
{
return new ConcretePrototype(*this);
}
private:
};
int main() {
Prototype* p = new ConcretePrototype();
Prototype* p1 = p->Clone();
<span class="hljs-keyword">return</span> <span class="hljs-number">0</span>;
}