6.原型模式
来源:互联网 发布:mac论坛哪个好 编辑:程序博客网 时间:2024/06/06 04:40
1.说明
请参阅本文第一章
2.原型模式说明
原型模式:用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象
通俗说话:创建一个和原来一模一样的对象,减少代码中使用动态来new的方式,并且不用知道任何的创建细节
3.UML
4.代码
//个人信息类,通过不同的数据类型来测试原型模式中的复制状况 //当原型中的为指针类型时,为浅复制,其余均为深复制,且会调用复制构造函数 //BaseClone.h 原型基类接口#ifndef __BASECLONE_H#define __BASECLONE_H#include <iostream>#include <string>class CBaseClone{public: virtual CBaseClone* Clone(){}};#endif //个人信息类#ifndef __WORKEXPRIENCE_H#define __WORKEXPRIENCE_H#include <iostream>class CWorkExprience{public: void SetInfo(std::string time, std::string company) { m_time = time; m_company = company; } std::string GetTime() { return m_time; } std::string GetCompany() { return m_company; }private: std::string m_time; std::string m_company;};#endif//原型模式构造类#ifndef __RESUME_H#define __RESUME_H#include <vector>#include "BaseClone.h"#include "WorkExprience.h"//在原型模式中当 为值类型,类类型,复合类型(vector)均为 深复制//指针类型为浅复制 class CResume:public CBaseClone{public: CResume() { } /*CResume(CResume& par) { std::cout<<"this is nothing."<<std::endl; }*/ void SetResumeName(std::string resuname) { m_resumename = resuname; } void SetInfo(std::string name, std::string sex) { m_name = name; m_sex = sex; } //深浅复制测试区 void AddWorkExprience(std::string time, std::string company) { m_exprience.SetInfo(time, company); } void Add_set(std::string time, std::string company) { CWorkExprience exper; exper.SetInfo(time, company); m_exset.push_back(exper); } void Set_mon(int* p) { if (p != NULL) m_mon = p; } //测试结束 void Display() { std::cout<<"resuname:"<<m_resumename.c_str()<<" "<<m_name.c_str()<<" "<<m_sex.c_str()<<std::endl; std::cout<<m_exprience.GetTime()<<" "<<m_exprience.GetCompany()<<std::endl; std::cout<<"setInfo:"<<std::endl; for (std::vector<CWorkExprience>::iterator it=m_exset.begin(); it!=m_exset.end(); it++) { std::cout<<it->GetTime()<<" "<<it->GetCompany()<<std::endl; } std::cout<<"set endl"<<std::endl; std::cout<<"point test "<<*m_mon<< std::endl; } CResume* Clone() { return new CResume(*this); //此处会调用构造函数 }private: std::string m_resumename; std::string m_name; std::string m_sex; //std::vector<> CWorkExprience m_exprience; std::vector<CWorkExprience> m_exset; //集合 用于测试clone时 是深复制还是浅复制 int* m_mon;};#endif//客户端调用#include <iostream>#include <string>#include "Resume.h"#include "BaseClone.h"int main(void){ CResume* resume = new CResume(); resume->SetResumeName("zp resume"); resume->SetInfo("ZP", "BOY"); resume->AddWorkExprience("2014-2015", "GHCA"); resume->Add_set("1990-1995", "CHANGHONG"); resume->Add_set("1996-1999", "GUANZI"); resume->Add_set("2000-2003", "YILONG"); int* mon = new int(20); resume->Set_mon(mon); std::cout<<"Init info"<<std::endl; resume->Display(); std::cout<<std::endl<<std::endl; std::cout<<"light info"<<std::endl; CResume* light = (CResume* )resume->Clone(); light->SetResumeName("Light Resume"); light->AddWorkExprience("2013-2014", "SIFANG"); light->Add_set("2004-2009", "LANGZHONG"); light->Add_set("2009-2012", "CHENGDU"); *mon = 30; light->Set_mon(mon); light->Display(); std::cout<<std::endl<<std::endl<<std::endl; std::cout<<"zp info"<<std::endl; resume->Display(); return 0; }
0 0
- 6.原型模式
- 6.原型模式
- 6.原型模式
- 6.Prototype-原型模式
- 6.Prototype-原型模式
- 原型模式
- 原型模式
- 原型模式
- 原型模式
- 原型模式
- 原型模式
- 原型模式
- 原型模式
- 原型模式
- 原型 模式
- 原型模式
- 原型模式
- 原型模式
- Snackbar使用及其注意事项
- 关于scanf 函数,你很少了解的“秘密”
- poj 3691 DNA repair(AC自动机+dp)
- SDUT 1197----约瑟夫问题
- Java获取图像Exif信息
- 6.原型模式
- 数据存储操作(1)-------- SharedPreference存储
- C# 里面的 #region 含义
- shell学习第四天----华丽的printf输出
- 空指针异常的原因
- JSP介绍
- 多路数组聚集(Multiway)
- 神奇的android:clipChildren属性
- poj 3281 Dining 【拆点网络流】【最大流经典问题 关键建图】