C++设计模式浅识原型模式
2016-05-26 19:07
281 查看
定义:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。
原型模式其实就是从一个对象再创建另外一个可定制的对象,而且不需要知道任何创建的细节。
原型模式主要考虑的深复制与浅复制,在C++的类设计中,拷贝构造函数就是浅复制,当重载赋值运算符时就是深复制。
浅复制:被复制对象的所有变量都含有原来的对象相同的值,而所有的对其他对象的引用都仍然指向原来的对象。
深复制:把引用对象的变量指向复制过的新对象,而不是原有的被引用的对象。
测试用例:
原型模式(Prototype)实现
原型模式其实就是从一个对象再创建另外一个可定制的对象,而且不需要知道任何创建的细节。
原型模式主要考虑的深复制与浅复制,在C++的类设计中,拷贝构造函数就是浅复制,当重载赋值运算符时就是深复制。
浅复制:被复制对象的所有变量都含有原来的对象相同的值,而所有的对其他对象的引用都仍然指向原来的对象。
深复制:把引用对象的变量指向复制过的新对象,而不是原有的被引用的对象。
测试用例:
int main(){ //生成对象 ConcretePrototype * conProA = new ConcretePrototype(); //复制自身 ConcretePrototype *conProB = conProA->Clone(); //先clone后调用拷贝构造函数, Output: clone constructor delete conProA; conProA = NULL; delete conProB; conProB = NULL; return 0; }
原型模式(Prototype)实现
//接口 class Prototype{ public: Prototype(){} virtual ~Prototype(){} virtual Prototype *Clone() = 0; }; //实现 class ConcretePrototype: public Prototype{ public: ConcretePrototype(): m_counter(0) {} virtual ~ConcretePrototype(){} //拷贝构造函数 ConcretePrototype(const ConcretePrototype &rhs){ std::cout << "constructor\n"; m_counter = rhs.m_counter; } //复制自身 virtual ConcretePrototype *Clone(){ //调用拷构造函数 std::cout << "clone\n"; return new ConcretePrototype(*this); } private: int m_counter; };
相关文章推荐
- HDU 1171.Big Event in HDU【01背包】【5月26】
- 【C++ 基础】c++中冒号(:)和双冒号(::)的用法
- c++ 拷贝构造函数
- C++走向远洋——55(项目一3、分数类的重载、>><<的重载)
- C语言存储空间管理和链表杂记
- C++走向远洋——54(项目一2、分数类的重载、取倒数)
- HDU 1173.采矿【不水的水题】【中位数】【5月26】
- [C++]数据永久化-下篇(使用数据库)
- 【C/C++学习笔记】C 实现大整数的加法操作 —— 纪念入职公司时的上机题
- 解决类似 /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found 的问题
- C++面试笔记--指针和引用
- C++ 类的继承——继承的细节
- 同样是公务员,为什么有人年薪4万有人40万?
- RESTFUL API Server in C++
- 【C语言】03-第一个C程序代码分析
- c语言下的变量类型及计算
- C++ 面向对象 —— 实用程序片段
- 【C语言】02-第一个C程序
- C++模板类的使用
- 基于范围的 for 语句 (C++)