再来一个原型模式。
原型模式(Prototype):用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。
下面是原型模式的C++代码:
/*
* initm.com
* 作者:Stupid
* 时间:2017-10-22 23:11
* 描述: 代码使用QT5.9+MinGW53_32编译通过,代码为原型模式的基本结构代码。
*/
#include <QCoreApplication>
#include <iostream>
template <typename T>
class Prototype
{
private:
T data;
public:
Prototype(T data):data(data){}
void print(){
std::cout << data << std::endl;
}
virtual Prototype* Clone() = 0;
};
template <typename T>
class ConcretePrototype1: public Prototype<T>
{
public:
ConcretePrototype1(T data): Prototype<T>(data){}
Prototype<T>* Clone()override final{
return new ConcretePrototype1(*this);
}
};
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
int data = 10;
Prototype<decltype(data)>* prototype = new ConcretePrototype1<decltype(data)>(data);
Prototype<decltype(data)>* prototype2 = prototype->Clone();
prototype2->print();
return a.exec();
}
代码中我故意使用基类来Clone,只是想说明Clone的类可以是未知的,可以是动态的变化的。和拷贝构造函数还是有区别的。这是一种概念性的东西,不去考虑实现;而拷贝构造函数是是一种实现方法。
有源码,学习了。