
设计模式之原型模式
发布日期:2021-05-07 15:14:39
浏览次数:24
分类:原创文章
本文共 1374 字,大约阅读时间需要 4 分钟。
目录
原型模式(prototype)
概念
- Prototype模式是一种对象创建型模式,它采取复制原型对象的方法来创建对象的实例。使用Prototype模式创建的实例,具有与原型一样的数据。
- 由原型对象自身创建目标对象。也就是说,对象创建这一动作发自原型对象本身。
- 目标对象是原型对象的一个克隆。也就是说,通过Prototype模式创建的对象,不仅仅与原型对象具有相同的结构,还与原型对象具有相同的值。
- 根据对象克隆深度层次的不同,有浅度克隆与深度克隆。
角色和职责
- 原型模式主要面对的问题是:“某些结构复杂的对象”的创建工作;由于需求的变化,这些对象经常面临着剧烈的变化,但是他们却拥有比较稳定一致的接口。
- 适用情况:
- 一个复杂对象,具有自我复制功能,统一一套接口。
案例
class Person{public: virtual Person *Clone() = 0; virtual void printT() = 0;};class JavaProgrammer : public Person{public: JavaProgrammer() { this->m_name = ""; this->m_age = 0; m_resume = NULL; } JavaProgrammer(string name, int age) { this->m_name = name; this->m_age = age; m_resume = NULL; } ~JavaProgrammer() { if (m_resume!= NULL) { free(m_resume); m_resume = NULL; } } virtual Person *Clone() { JavaProgrammer *p = new JavaProgrammer; *p = *this; return p; } void setResume(char *resume) { m_resume = new char[strlen(resume) + 1]; strcpy(m_resume, resume); } virtual void printT() { cout << "m_name:" << m_name << "\t" << "m_age:" << m_age << endl; if (m_resume != NULL) { cout << m_resume << endl; } }protected:private: string m_name; int m_age; char *m_resume;};void main(){ JavaProgrammer javaperson1("张三", 30); javaperson1.setResume("我是java程序员"); Person *p2 = javaperson1.Clone(); //对象具有自我复制功能 注意深拷贝和浅拷贝问题 p2->printT(); delete p2; cout<<"hello..."<<endl; system("pause"); return ;}
【注】参考传智扫地僧C++设计模式
发表评论
最新留言
表示我来过!
[***.240.166.169]2025年03月24日 06时37分37秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
技术写作技巧分享:我是如何从写作小白成长为多平台优秀作者的?
2021-05-09
Jupyter Notebook 暗色自定义主题
2021-05-09
[Python学习笔记]组织文件
2021-05-09
基于Redo Log和Undo Log的MySQL崩溃恢复流程
2021-05-09
从RocketMQ的Broker源码层面验证一下这两个点
2021-05-09
如何正确的在项目中接入微信JS-SDK
2021-05-09
纵览全局的框框——智慧搜索
2021-05-09
快服务流量之争:如何在快服务中占领一席之地
2021-05-09
【活动】直播揭秘<如何从0开发HarmonyOS硬件>
2021-05-09
Unity平台 | 快速集成华为性能管理服务
2021-05-09
对模拟器虚假设备识别能力提升15%!每日清理大师App集成系统完整性检测
2021-05-09
使用Power BI构建数据仓库与BI方案
2021-05-09
Django认证系统并不鸡肋反而很重要
2021-05-09
快用Django REST framework写写API吧
2021-05-09
tep用户手册帮你从unittest过渡到pytest
2021-05-09
12张图打开JMeter体系结构全局视角
2021-05-09
Spring Boot 2.x基础教程:构建RESTful API与单元测试
2021-05-09
[UWP 自定义控件]了解模板化控件(1):基础知识
2021-05-09
UWP 自定义控件:了解模板化控件 系列文章
2021-05-09
[UWP]从头开始创建并发布一个番茄钟
2021-05-09