设计模式:原型模式(C++)【克隆羊多莉】
原型模式介绍 这节我们继续学习设计模式——原型模式。我们先看看原型模式的标准说法, 用原型实例指定创建对象的种类并且通过拷贝这些原型创建新的对象 。 其实原型模式就是从一个对象再创建另外一个可定制的对象,而且不需要知道任何创建的细节而已 。 我们 先看看C++和其他一些面向对象的编程语言的区别 。 在java、C# 或者一些其他的面向对象编程语言,他们所有的类都是都会继承或者间接继承Object类 。比如说java中Object类 有一个clone方法,实现上就是原型模式的体现,子类需要根据情况进行实现罢了。而 我们的C++呢 没有Object(上帝类),所以呢 我们需要在我们自己的原型类中添加一个clone 克隆方法就行了 。有人或许会说, C++不是有拷贝构造函数么。确实有默认的拷贝构造函数呀,但是 默认的拷贝构造函数只提供基本的值拷贝 ,如果有在堆区开辟空间的成员呢? 所以我们要提供自己的拷贝构造函数进行深拷贝,方便用户,还应该提供一个clone方法(实际就是去调用拷贝构造函数) 。下面看 原型模式克隆羊多莉 案例 。 克隆羊多利代码实现 原型图就是不画了吧,就一个类。。。。 对外提供clone方法,如果类成员有在堆区开辟空间,需要重新拷贝构造函数进行深拷贝!clone方法本质还是调用拷贝构造函数 。注意,我们的 析构函数要释放堆区开辟的内容 哟。 #define _CRT