【C++】Chapter6:原型模式

原型模式(Prototype),用原型实例指针创建对象的种类,并且通过拷贝这些原型创建新的对象。

原型模式其实就是从一个对象再创建另外一个可定制的对象,而且不需知道任何创建的细节。

一般在初始化的信息不发生变化的情况下,克隆是最好的办法。这既隐藏了对象创建的细节,又对性能是大大的提高。

不用重新初始化对象,而是动态地获得对象运行时的状态。

 

在很多关于原型模式的JAVA、C#的资料中都会顺带提到浅复制与深复制。这里也顺带复习下

“浅复制”被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用都仍然指向原来的对象。

“深复制”把引用对象的变量指向复制过的新对象,而不是原有的被引用的对象。

 

 

工程结构:

(1)原型抽象类

Prototype.h

(2)具体原型类

ConcretePrototypeA.h

ConcretePrototypeB.h

(3)客户端

PrototypeApplication.cpp

 

 

(1)原型抽象类

Prototype.h

#ifndef _PROTOTYPE_H_ #define _PROTOTYPE_H_ #include <string> #include <iostream> using namespace std; class CPrototype { public: CPrototype(){} virtual ~CPrototype(){} virtual CPrototype* Clone() = 0; private: string m_strId; }; #endif _PROTOTYPE_H_

 

 

(2)具体原型类

ConcretePrototypeA.h

#ifndef _CONCRETE_PROTOTYPE_A_ #define _CONCRETE_PROTOTYPE_A_ #include "Prototype.h" class CConcretePrototypeA : public CPrototype { public: CConcretePrototypeA() { cout << "construction of CConcretePrototypeA/n"; } CConcretePrototypeA(const CConcretePrototypeA& ObjectA) { cout << "copy construction of CConcretePrototypeA/n"; } virtual ~CConcretePrototypeA() { cout << "destruction of CConcretePrototypeA/n"; } virtual CPrototype* Clone() { return (new CConcretePrototypeA(*this)); } }; #endif _CONCRETE_PROTOTYPE_A_

 

 

ConcretePrototypeB.h

#ifndef _CONCRETE_PROTOTYPE_B_ #define _CONCRETE_PROTOTYPE_B_ #include "Prototype.h" class CConcretePrototypeB : public CPrototype { public: CConcretePrototypeB() { cout << "construction of CConcretePrototypeB/n"; } CConcretePrototypeB(const CConcretePrototypeB& ObjectB) { cout << "copy construction of CConcretePrototypeB/n"; } virtual ~CConcretePrototypeB() { cout << "destruction of CConcretePrototypeB/n"; } virtual CPrototype* Clone() { return (new CConcretePrototypeB(*this)); } }; #endif _CONCRETE_PROTOTYPE_B_

 

 

(3)客户端

PrototypeApplication.cpp

// PrototypeApplication.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include "ConcretePrototypeA.h" #include "ConcretePrototypeB.h" int _tmain(int argc, _TCHAR* argv[]) { CPrototype* pObjectA = new CConcretePrototypeA(); CPrototype* pObjectB = pObjectA->Clone(); CPrototype* pObjectC = new CConcretePrototypeB(); CPrototype* pObjectD = pObjectC->Clone(); delete pObjectA; delete pObjectB; delete pObjectC; delete pObjectD; system("pause"); return 0; }

 

 

你可能感兴趣的:(C++,prototype,delete,System,Class,construction)