prototype.h
#ifndef PROTOTYPE_H
#define PROTOTYPE_H
#include <QtDebug>
class Prototype
{
public:
Prototype(){}
virtual ~Prototype(){}
virtual Prototype *clone() const = 0; //定义clone接口,根据不同的派生类来实例化对象
virtual void show() = 0;
};
#endif // PROTOTYPE_H
ConcretePrototypeA.h
#ifndef CONCRETEPROTOTYPEA_H
#define CONCRETEPROTOTYPEA_H
#include <QtDebug>
#include "prototype.h"
class ConcretePrototypeA : public Prototype
{
public:
ConcretePrototypeA(QString name):m_name(name){}
~ConcretePrototypeA(){}
//拷贝构造函数
ConcretePrototypeA(const ConcretePrototypeA &other)
{
m_name = other.m_name;
}
//实现基类定义的Clone接口,内部调用拷贝构造函数实现复制功能
ConcretePrototypeA* clone() const
{
return new ConcretePrototypeA(*this);
}
void show(){ qDebug() << m_name << " 你好";}
//private:
QString m_name;
};
#endif // CONCRETEPROTOTYPEA_H
main.cpp
#include <QApplication>
#include "prototype.h"
#include "ConcretePrototypeA.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Prototype *p1 = new ConcretePrototypeA("小明");
Prototype *p2 = p1->clone();
p1->show();
p2->show();
delete p1;
delete p2;
return a.exec();
}
原型模式就是从一个对象再创建另外一个可定制的对象,而且不需知道任何创建的细节。
UML