c++之原型模式
发布日期:2021-09-25 21:40:55
浏览次数:2
分类:技术文章
本文共 1366 字,大约阅读时间需要 4 分钟。
原型模式
定义:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象
它属于创建者模式,其实就是通过一个对象再创建另外一个对象的副本,但是不需要知道任何创建对象所需要的细节。
优点:
1、当一个对象经过一段时间后,它内部的状态已经发生了变化,这时候,程序的其他业务需要当前状态下 的对象去进行其他的操作。这时候如果直接在new一个新的对象出来,它的状态就对应不上了。这时候采用原型模式,就可以获取一个状态一致的对象。
2、有时候创建对象时,构造函数需要的参数却很多,但是我们又不完全的知道每个参数的具体含义,就可以使用原型模式来创建一个新的对象,从而不必去理会创建的过程。
3、恰当的使用原型模式,可以减少代码量,提高程序的效率。
代码:
#includeusing 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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
不错!
[***.144.177.141]2024年04月20日 23时57分53秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
L2-033 简单计算器 (25 分)
2019-04-26
L2-034 口罩发放 (25 分)
2019-04-26
L2-019 悄悄关注 (25 分)
2019-04-26
L1-020 帅到没朋友 (20 分)
2019-04-26
L1-046 整除光棍 (20 分)
2019-04-26
L2-021 点赞狂魔 (25 分)【优化后的】
2019-04-26
L2-032 彩虹瓶 (25 分)
2019-04-26
L2-004 这是二叉搜索树吗? (25 分)
2019-04-26
L2-011 玩转二叉树 (25 分)
2019-04-26
L2-006 树的遍历 (25 分)
2019-04-26
L3-010 是否完全二叉搜索树 (30 分)
2019-04-26
6-10 阶乘计算升级版 (20 分)
2019-04-26
7-78 阅览室 (20 分)
2019-04-26
7-21 查验身份证 (15 分)
2019-04-26
实验4-1-5 韩信点兵 (10 分)
2019-04-26
1016 部分A+B (15 分)
2019-04-26
1023 组个最小数 (20 分)
2021-06-29
1036 跟奥巴马一起编程 (15 分)
2021-06-29
1002 写出这个数 (20 分)
2021-06-29