设计模式 Design Parttern ——原型Prototype
2010-10-14 15:36
756 查看
设计模式 Design Parttern ——原型Prototype
http://blog.csdn.net/leeidea
1:头文件
2:源文件
3:用户文件main.c
http://blog.csdn.net/leeidea
1:头文件
#ifndef _PROTOTYPE_H_VANEY_ #define _PROTOTYPE_H_VANEY_ #include <iostream> using namespace std; /****************************************************************** 名称 :Prototype.h 版本 :1.00 描述 :演示原型设计模式的概念 作者 :vaney.li@gmail.com http://blog.csdn.net/leeidea 日期 :2010年10月14日 版权 :vaney.li@gmail.com http://blog.csdn.net/leeide 参考 :http://www.shenmiguo.com/archives/2009/293_design-patterns-prototype.html ******************************************************************/ /* 官方解释:The Prototype pattern specifies the kind of objects to instantiate using a prototypical instance. 我的理解: 1. Prototype是原型基类,提供Clone纯虚方法,它根据不同的派生类来克隆不同的对象。 2. ConcretePrototype是原型具体类。实现Clone方法,克隆自己,返回克隆后的新对象。 3. Client调用基类Clone接口,就可以得到一个克隆对象。 要点 1. 原型模式中,Client并不知道要克隆对象的实际类型,只需知道基类类型即可。 2. 克隆对象比直接创建对象的优点在于,克隆是将原有对象的行为属性带到了新的对象中。 3. C++没有克隆方法,要克隆一个对象,需要借助拷贝构造函数(Copy Constructor)来实 现。拷贝构造函数中实现拷贝对象有浅拷贝和深拷贝:浅拷贝是指对象复制时,只是对于 对象中的数据成员进行值拷贝;深拷贝是指对象赋值时,对于对象的简单数据成员进行值 拷贝,对于对象中的动态成员(堆或者其他系统资源),要重新分配动态空间。 当类不定义拷贝构造函数的时候,编译器会自动生一个构造函数,叫做默认拷贝构造函数。 默认拷贝构造函数使用浅拷贝方式。如果类中含有动态数据成员,就必须使用深拷贝方式 实现拷贝构造函数,否则,在销毁对象时,两个对象的析构函数将对同一个内存空间释放 两次,产生运行时错误。 我的应用: */ //原型基类 class CPrototype { public: CPrototype(void) { cout << "CPrototype()" << endl; } virtual ~CPrototype(void) { cout << "~CPrototype()" << endl; } public: //需要子类实现的方法 virtual CPrototype* Clone() = 0; }; //具体的原型 class CPrototypeA : public CPrototype { int _id; public: CPrototypeA(int id):_id(id) { cout << "CPrototypeA()" << endl; } CPrototypeA(const CPrototypeA& a) { _id = a._id; } virtual ~CPrototypeA(void) { cout << "~CPrototypeA()" << endl; _id = 0; } public: virtual CPrototype* Clone() { return new CPrototypeA(*this); } }; //具体的原型 class CPrototypeB : public CPrototype { char* _name; public: CPrototypeB(char* name) { cout << "CPrototypeB()" << endl; if(name) { int len = strlen(name); _name = (char*)malloc(len + 1); strcpy(_name,name); } else { _name = 0; } } CPrototypeB(const CPrototypeB& b) { if(b._name) { int len = strlen(b._name); _name = (char*)malloc(len + 1); strcpy(_name,b._name); } else { _name = 0; } } virtual ~CPrototypeB(void) { cout << "~CPrototypeB()" << endl; if(_name) free(_name); _name = 0; } public: virtual CPrototype* Clone() { return new CPrototypeB(*this); } }; #define C_API extern "C" //用户 C_API int UsingPT(); #endif
2:源文件
#include "Prototype.h" C_API int UsingPT() { /* 创建typeA,然后克隆一个typeA */ CPrototypeA* typeA = new CPrototypeA(10); CPrototypeA* clonedA = dynamic_cast<CPrototypeA*>(typeA->Clone()); /* 创建typeB,然后克隆一个typeB */ CPrototypeB* typeB = new CPrototypeB("vaney"); CPrototypeB* clonedB = dynamic_cast<CPrototypeB*>(typeB->Clone()); return 1; }
3:用户文件main.c
extern int UsingPT(); //系统默认入口 int _tmain(int argc, _TCHAR* argv[]) { return UsingPT(); }
相关文章推荐
- 原型设计模式(Prototype Design Pattern)
- Design Pattern Prototype 原型设计模式
- 原型设计模式(prototype design pattern)
- 原汁原味设计模式-原型prototype
- 设计模式(四)、PROTOTYPE(原型)---对象创建型模式
- 设计模式: Prototype (原型)
- 设计模式(五):原型模式Prototype(创建型模式)
- 【HeadFirst 设计模式学习笔记】18 原型(Prototype)模式拾零
- 23设计模式之原型模式(Prototype)
- 设计模式--原型模式(ProtoType)
- 设计模式-原型模式Prototype
- 设计模式之原型模式(Prototype)
- 设计模式学习-Prototype(原型)
- 原型设计模式prototype-构造js自定义对象
- 设计模式:原型模式(Prototype)
- 设计模式 Design Parttern ——建造者模式 Builder
- 设计模式学习总结4 - 创建型4 - Prototype原型模式
- java语言实现创建型设计模式—原型模式(Prototype)
- 浅谈JAVA设计模式之——原型模式(Prototype)
- 深入浅出设计模式 ------ Prototype(原型模式)之深度克隆