您的位置:首页 > 其它

五。设计模式(原型模式)

2016-03-17 22:44 260 查看
概念: 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。

1.浅复制,引用对象不进行复制。

使用环境:

    1.当要实例化的类是在运行时刻指定时,例如:通过动态装载,

  2.为了避免创建与产品类层次平行的工厂类层次时。

    

3.当一个类的实例只能有几个不同状态组合中的一种时。建立相应数目的原型并克隆它们可能比每次用合适的状态手工

 实例化该类更方便一些。

原型模式的构成:

 1.抽象的原型类(prototype):定义具有克隆自己方法的接口。

2.具体原型类(ConcretePrototype):实现具体的克隆方法。

3.客户类(Client):通过克隆生成一个新的对象。

具体代码如下:

客户端类代码:

******************************************************************

#include <QCoreApplication>

#include"concreteprototype.h"

#include<QDebug>

int main(int argc, char *argv[])

{

QCoreApplication a(argc, argv);

concreteprototype *type1 = new concreteprototype("1");

concreteprototype *type2 =( concreteprototype *)type1->clone();

qDebug()<<"id"<<type2->get();

return a.exec();

}


********************************************************************

抽象原型类代码:.h文件

***********************************************************************

#ifndef PROTOTYPE_H

#define PROTOTYPE_H

#include<QString>


class Prototype

{

public:

Prototype(QString str);


virtual Prototype* clone()=0;

private:

QString id;

};



***********************************************************************

.CPP文件

********************************************************************

#include "prototype.h"


Prototype::Prototype(QString str)

{

id=str;

}



*******************************************************************

具体原型类代码.h文件

*****************************************************************

#ifndef CONCRETEPROTOTYPE_H

#define CONCRETEPROTOTYPE_H

#include"prototype.h"


class concreteprototype :public Prototype

{

public:

concreteprototype(QString id);

Prototype * clone();

QString get()

{

return id1;

}

private :

QString id1;

};


#endif // CONCRETEPROTOTYPE_H



****************************************************************

.CPP 文件

***************************************************************

#include "concreteprototype.h"


concreteprototype::concreteprototype(QString id):

Prototype(id)

{

id1=id;

}


Prototype* concreteprototype::clone()

{

return (Prototype*) this;


}


**************************************************************

不愿具体实现某个对象,用克隆实现。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息