定义:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。
原型模式其实就是从一个对象再创建另外一个可定制的对象,而且不需要知道任何创建的细节。
原型模式主要考虑的深复制与浅复制,在c++++的类设计中,拷贝构造函数就是浅复制,当重载赋值运算符时就是深复制。
浅复制:被复制对象的所有变量都含有原来的对象相同的值,而所有的对其他对象的引用都仍然指向原来的对象。
深复制:把引用对象的变量指向复制过的新对象,而不是原有的被引用的对象。
测试用例:
[code]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)实现
[code]//接口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;};
以上就是C++设计模式浅识原型模式的内容,更多相关内容请关注PHP中文网(www.php.cn)!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1431923.html
微信扫一扫
支付宝扫一扫