6 原型模式
6.1 概述
用一个已经创建的实例为原型,通过复制该对象来创建一个和原型对象相同的新对象。
6.2 结构
抽象原型类:规定了具体原型对象必须实现的 clone() 方法。
具体原型类:实现抽象原型的 clone() 方法,它是可被复制的对象。
访问类:使用具体原型类中的 clone() 方法来复制新对象。
6.3 实现
6.3.1 分类
浅克隆:创建一个新的对象,新对象的属性和原来对象完全相同,对于非基本类型属性,仍指向原有属性所指向的对象的内存地址。
深克隆:创建一个新的对象,属性中引用的对象也会被克隆,不再指向原有地址。
6.3.2 UML图
6.3.3代码
#include<iostream>
using namespace std;
class Prototype {
public:
Prototype() {}
~Prototype() {}
virtual Prototype* clone() = 0;
virtual void name() = 0;
};
class Realizetype : public Prototype {
public:
Realizetype() {
name();
}
~Realizetype() {}
//核心:通过拷贝构造函数实现克隆
Realizetype(const Realizetype &other) {
cout << "克隆 ";
name();
}
Realizetype* clone () {
return new Realizetype(*this);
}
void name() {
cout << "原型模式" << endl;
}
};
int main() {
Realizetype* r1 = new Realizetype();
Realizetype* r2 = r1->clone();
}