c++之原型模式
发布日期:2021-09-25 21:40:55 浏览次数:2 分类:技术文章

本文共 1366 字,大约阅读时间需要 4 分钟。

原型模式

定义:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象

它属于创建者模式,其实就是通过一个对象再创建另外一个对象的副本,但是不需要知道任何创建对象所需要的细节。

优点:

1、当一个对象经过一段时间后,它内部的状态已经发生了变化,这时候,程序的其他业务需要当前状态下 的对象去进行其他的操作。这时候如果直接在new一个新的对象出来,它的状态就对应不上了。这时候采用原型模式,就可以获取一个状态一致的对象。

2、有时候创建对象时,构造函数需要的参数却很多,但是我们又不完全的知道每个参数的具体含义,就可以使用原型模式来创建一个新的对象,从而不必去理会创建的过程。

3、恰当的使用原型模式,可以减少代码量,提高程序的效率。

代码:

#include 
using namespace std;//原型class Prototype{public: Prototype(int n) :m_num(0) { m_num = n; } int getNum() { return m_num; } virtual Prototype* clone() = 0;private: int m_num;};//具体原型实例Aclass PrototypeA :public Prototype{public: PrototypeA(int num) :Prototype(num) { } Prototype* clone() { return new PrototypeA(*this); }};//具体原型实例Bclass PrototypeB :public Prototype{public: PrototypeB(int num) :Prototype(num) { } Prototype* clone() { return new PrototypeB(*this); }};//客户端int main(){ PrototypeA *proA = new PrototypeA(10); cout << "proA-num=" << proA->getNum() << " 对象&=" << proA << endl; PrototypeA *newproA = static_cast
(proA->clone()); cout << "newproA-num=" << newproA->getNum() <<" 对象&="<< newproA << endl; PrototypeB *newproB = static_cast
(proA->clone()); cout << "newproB-num=" << newproB->getNum() << " 对象&=" << newproB << endl; if (proA) { delete proA; proA = nullptr; } if (newproA) { delete newproA; newproA = nullptr; } if (newproB) { delete newproB; newproB = nullptr; } return 0;}

 

转载地址:https://blog.csdn.net/c_shell_python/article/details/107490639 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:c++之备忘录模式
下一篇:c++之状态模式

发表评论

最新留言

不错!
[***.144.177.141]2024年04月20日 23时57分53秒