设计模式---原型模式(C++实现)

来源:互联网 发布:现有sql server 实例 编辑:程序博客网 时间:2024/05/13 19:58

找了一图:这就很好理解了




什么是原型模式?


在GOF的《设计模式:可复用面向对象软件的基础》中是这样说的:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。这这个定义中,最重要的一个词是“拷贝”,也就是口头上的复制,而这个拷贝,也就是原型模式的精髓所在。


为什么要使用原型模式?


原型模式和建造者模式、工厂方法模式一样,都属于创建型模式的一种。简单的来说,我们使用原型模式,就是为了创建对象。

下面的场景中使用原型模式最好:

1.  当我们的对象类型不是开始就能确定的,而这个类型是在运行期确定的话,那么我们通过这个类型的对象克隆出一个新的对象比较容易一些;


2.  有的时候,我们需要一个对象在某个状态下的副本,此时,我们使用原型模式是最好的选择

       3.  当我们处理一些比较简单的对象时,并且对象之间的区别很小,可能就几个属性不同而已,那么就可以使用原型模式来完成,省去了创建对象时的麻烦了


    4.有的时候,创建对象时,构造函数的参数很多,而自己又不完全的知道每个参数的意义,就可以使用原型模式来创建一个新的对象,不必去理会创建的过程,让创建过程见鬼去吧。



用UML类图表示原型模式


C++实现


class Prototype{public:Prototype(){}virtual ~Prototype(){}virtual Prototype *Clone() = 0;};class ConcretePrototype : public Prototype{public :ConcretePrototype():m_count(0){}virtual ~ConcretePrototype(){}//拷贝构造ConcretePrototype(const ConcretePrototype &cp){m_count = cp.m_count;}//赋值自身virtual ConcretePrototype * Clone(){//调用拷贝构造函数return new ConcretePrototype(*this);}private:int m_count;};


测试:

int test_Prototype(){//生成对象ConcretePrototype *pa = new ConcretePrototype();//复制自身ConcretePrototype* pb = pa->Clone();delete pa;delete pb;pa = NULL;pb = NULL;system("pause");return 0;}



其实,在我看来  这就是我们在自己实现string类时遇到的深浅拷贝的事,只是这里用了Clone()函数,我们就直接写出深拷贝的拷贝构造函数。




0 0
原创粉丝点击