设计模式之原型模式 c++实现以及详解
2014-07-05 15:17
585 查看
原型模式提供了自我复制的功能,就是说新对象的创建可以通过已有对象进行创建。
定义:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。 其实就是从一个对象复制另一个对象而不需要知道任何复制的细节
UML图:
三、优缺点:
优点:复制自身。客户不知道需要对象的实际类型,只需知道它的抽象基类即可。(即有继承树的情况)
缺点:必须先有一个对象实例(即原型)才能clone。
C++没有克隆方法,要克隆一个对象,需要借助拷贝构造函数(Copy Constructor)来实现。
原型模式中需要特别注意的问题是深拷贝 浅拷贝问题 。 上面代码不涉及深拷贝 ,深拷贝即把用到的指针和引用所指向的对象一起进行复制。
原型模式通过复制原型(原型)而获得新对象创建的功能,这里原型本身就是"对象工厂"(因为能够生产对象),实际上原型模式和 Builder 模式、AbstractFactory 模式都是通过一个类(对象实例)来专门负责对象的创建工作(工厂对象),它们之间的区别是: Builder 模式重在复杂对象的一步步创建(并不直接返回对象),AbstractFactory 模式重在产生多个相互依赖类的对象,而原型模式重在从自身复制自己创建新类。
参考
http://www.weixueyuan.net/view/1266.html
http://blog.csdn.net/cabinriver/article/details/8895372
大话设计模式
定义:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。 其实就是从一个对象复制另一个对象而不需要知道任何复制的细节
UML图:
三、优缺点:
优点:复制自身。客户不知道需要对象的实际类型,只需知道它的抽象基类即可。(即有继承树的情况)
缺点:必须先有一个对象实例(即原型)才能clone。
C++没有克隆方法,要克隆一个对象,需要借助拷贝构造函数(Copy Constructor)来实现。
#include <cstdio> //代码来自http://blog.csdn.net/cabinriver/article/details/8895372 //接口 class CPrototype { public: CPrototype(){} virtual ~CPrototype(){} virtual CPrototype* Clone() = 0; }; //实现 class CConcretePrototype : public CPrototype { public: CConcretePrototype():m_counter(0){} virtual ~CConcretePrototype(){} //拷贝构造函数 CConcretePrototype(const CConcretePrototype& rhs) { m_counter = rhs.m_counter; } //复制自身 virtual CPrototype* Clone() { //调用拷贝构造函数 return new CConcretePrototype(*this); } private: int m_counter; }; int main(int argc, char **argv) { //生成对像 CPrototype* conProA = new CConcretePrototype(); //复制自身 CPrototype* conProB = conProA->Clone(); delete conProA; conProA=NULL; delete conProB; conProB=NULL; return 0; }
原型模式中需要特别注意的问题是深拷贝 浅拷贝问题 。 上面代码不涉及深拷贝 ,深拷贝即把用到的指针和引用所指向的对象一起进行复制。
关于原型模式的讨论
原型模式通过复制原型(原型)而获得新对象创建的功能,这里原型本身就是"对象工厂"(因为能够生产对象),实际上原型模式和 Builder 模式、AbstractFactory 模式都是通过一个类(对象实例)来专门负责对象的创建工作(工厂对象),它们之间的区别是: Builder 模式重在复杂对象的一步步创建(并不直接返回对象),AbstractFactory 模式重在产生多个相互依赖类的对象,而原型模式重在从自身复制自己创建新类。参考
http://www.weixueyuan.net/view/1266.html
http://blog.csdn.net/cabinriver/article/details/8895372
大话设计模式
相关文章推荐
- 设计模式之单例模式 c++实现以及详解
- 通过例子学设计模式之--原型模式以及使用场景说明(C++实现)
- 设计模式之代理模式 c++实现以及详解
- 设计模式之原型模式,C++实现
- 我所理解的设计模式(C++实现)——原型模式(Prototype Pattern)
- 设计模式C++实现六: 原型模式
- 设计模式C++实现(5)——原型模式、模板方法模式
- 设计模式C++实现(5)——原型模式、模板方法模式
- 设计模式C++实现(4)——原型模式、模板方法模式
- 我所理解的设计模式(C++实现)——原型模式(Prototype Pattern)
- 设计模式C++实现--原型模式、模板方法模式
- 常见设计模式解析和实现(C++)Prototype模式(原型模式)
- 设计模式C++实现(5)——原型模式、模板方法模式
- 设计模式C++实现(5)——原型模式、模板方法模式
- 设计模式C++实现(5)——原型模式、模板方法模式
- 我所理解的设计模式(C++实现)——原型模式(Prototype Pattern)
- 设计模式C++实现(5)——原型模式、模板方法模式
- 设计模式之原型模式及c++实现
- C++设计模式实现--原型模式
- 设计模式C++实现(5)——原型模式、模板方法模式