博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
设计模式之原型模式
阅读量:5436 次
发布时间:2019-06-15

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

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

【情景】假设现在在一家公司应聘,对方要求填写求职信息表,多位面试官每人都要一份,需要手工填写。现在有两种方式可供选择:a、手工填写多份信息表;  2、手工填写一份,然后剩下的拿填写完得第一份复印。第二种方式就是这里所说的原型模式,第一份手工填写的信息表就是一个原型。一般在初始化的信息不发生变化的情况下,克隆是最好的办法。这既隐藏了对象创建的细节,有对性能大大的提高。

【UML】

【代码】

#include 
#include
using namespace std;class Resume{protected: char* name;public: Resume() {} virtual Resume* Clone() { return NULL; } virtual void SetName(char* name) {} virtual void Show() {}};class ConcreteResumeA : public Resume{public: ConcreteResumeA(char* name); ConcreteResumeA(ConcreteResumeA &a); ~ConcreteResumeA(); void SetName(char* name); Resume* Clone(); void Show();};ConcreteResumeA::ConcreteResumeA(char* name){ if(NULL == name) { this->name = new char[1]; this->name[0] = '\0'; } else { this->name = new char[strlen(name) + 1]; strcpy(this->name, name); }}ConcreteResumeA::ConcreteResumeA(ConcreteResumeA &a){ this->name = new char[strlen(a.name) + 1]; strcpy(name, a.name);}ConcreteResumeA::~ConcreteResumeA(){ delete [] name;}void ConcreteResumeA::SetName(char* name){ delete [] this->name; if(NULL == name) { this->name = new char[1]; this->name[0] = '\0'; } else { this->name = new char[strlen(name) + 1]; strcpy(this->name, name); }}void ConcreteResumeA::Show(){ cout<<"ConcreteResumeA name: "<
<
Clone(); a1->Show(); delete a1; a2->Show(); delete a2; return 0;}

转载于:https://www.cnblogs.com/WIT-Evan/archive/2012/03/29/7291498.html

你可能感兴趣的文章
关于RTSP-Over-HTTP
查看>>
SQL SERVER 2005如何建立自动备份的维护计划
查看>>
深入剖析C#的多态
查看>>
SQL2008 用户'sa'登录失败(错误18456)图文解决方法
查看>>
json属性名必须加引号的讨论
查看>>
Winform--数据库链接(EF CodeFirst)
查看>>
TCP的发送缓冲区和接收缓冲区
查看>>
SQL Server的导出导入方式有
查看>>
Unity3D_(Shuriken粒子系统)制作简单的烟花爆炸效果
查看>>
3. Longest Substring Without Repeating Characters
查看>>
织梦添加搜索功能
查看>>
JDK的安装和环境变量配置
查看>>
jmeter学习记录--05--Beanshell2
查看>>
HDU1402 HDU4609 FFT快速DFT
查看>>
DataGridView添加一行数据、全选、取消全选、清空数据、删除选中行
查看>>
抽象工厂模式
查看>>
数据库连接数使用情况监控
查看>>
<java基础学习>02JAVA的基础组成
查看>>
共享路径
查看>>
【动态语言和静态语言】动态语言和静态语言的认识,定义
查看>>