设计模式之原型模式 c++实现以及详解

来源:互联网 发布:apache serveradmin 编辑:程序博客网 时间:2024/05/01 23:14

原型模式提供了自我复制的功能,就是说新对象的创建可以通过已有对象进行创建。

定义:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。 其实就是从一个对象复制另一个对象而不需要知道任何复制的细节

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   

        大话设计模式

 



0 0
原创粉丝点击