大话设计模式C++实现-第9章-原型模式

2015-01-24 05:44:58 · 作者: · 浏览: 3

一、UML图

\

二、概念

原型模式(Prototype):用原型示例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。<??http://www.2cto.com/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+PHN0cm9uZz7I/aGiy7XD9zwvc3Ryb25nPjwvcD4KPHA+o6gxo6nUrdDNxKPKvcq1vMrJz77Nyse009K7uPa21M/z1Nm0tL2owe3N4tK7uPa/ybao1sa1xLbUz/OjrLb4x9Kyu9Do0qrWqrXAyM66zrS0vai1xM+4vdqhozwvcD4KPHA+o6gyo6nSu7Dj1Nqz9cq8u6+1xNDFz6Kyu7eiyfqx5LuvtcTH6b/2z8KjrL/LwqHKx9fuusO1xLDst6iho9XivMjS/rLYwcu21M/ztLS9qLXEz7i92qOs09C21NDUxNzKx7TztPO1xMzhuN+ho9LyzqrI57n7srvTw0Nsb25lo6zDv7TObmV3o6y2vNDo0qrWtNDQ0ru0zrm51Oy6r8r9o6zI57n7ubnU7Lqvyv21xNa00NDKsbzkutyzpKOsxMfDtLbgtM61xNa00NDV4rj2s/XKvLuvstnX977NyrXU2srHzKu1zdCnwcuhozwvcD4KPHA+o6gzo6k8c3Ryb25nPsezuLTWxrrNye64tNbGo7o8L3N0cm9uZz48L3A+CjxwPsezuLTWxqO6sbu4tNbGtcS21M/ztcTL+dPQseTBv7a8uqzT0NPr1K3AtLXEttTP88/gzay1xCYjMjA1NDA7o6y2+Mv509C21Mbky/u21M/ztcTS/dPDtrzI1Mi71rjP8tStwLS1xLbUz/OhozwvcD4KPHA+ye64tNbGo7qw0dL908O21M/ztcSx5MG/1rjP8ri01sa5/bXE0MK21M/zo6y2+LK7ysfUrdPQtcSxu9L908O1xLbUz/OhozwvcD4KPHA+Q2xvbmW1xMqxuvLKudPDye64tNbGoaM8L3A+CjxwPjxzdHJvbmc+y8ShokMmIzQzOyYjNDM7yrXP1jwvc3Ryb25nPjwvcD4KPHA+o6gxo6lQcm90b3R5cGUuaDwvcD4KPHA+PC9wPgo8cHJlIGNsYXNzPQ=="brush:java;">#ifndef PROTOTYPE_H #define PROTOTYPE_H #include #include //工作经验类:WorkExperience类 class WorkExperience { private: std::string workDate; std::string company; public: WorkExperience(){} ~WorkExperience(){} //供克隆调用的构造函数 WorkExperience(WorkExperience* work) { this->workDate=work->workDate; this->company=work->company; } std::string getWorkDate() { return workDate; } void setWorkDate(std::string workDate) { this->workDate=workDate; } std::string getCompany() { return company; } void setCompany(std::string company) { this->company=company; } //克隆 WorkExperience* Clone() { //调用供克隆调用的构造函数WorkExperience(WorkExperience) return new WorkExperience(this); } }; //原型类,声明一个克隆自身的接口。 class Prototype { protected: std::string name; std::string sex; std::string age; std::string timeArea; std::string company; public: virtual void SetPersonalInfo(std::string sex,std::string age)=0; virtual void Display()=0; virtual Prototype* Clone()=0; }; //具体原型类,即ConcretePrototype类,本例中为简历Resume类,实现一个克隆自身的操作。 class Resume:public Prototype { private: WorkExperience* work; public: Resume(std::string name) { this->name=name; work=new WorkExperience(); } ~Resume() { delete work; } //供克隆调用的构造函数 Resume(WorkExperience* work) { this->work=work->Clone(); } void SetPersonalInfo(std::string sex,std::string age) { this->sex=sex; this->age=age; } void SetWorkExperience(std::string workDate,std::string company) { work->setWorkDate(workDate); work->setCompany(company); } void Display() { std::cout< getWorkDate()<<" "< getCompany()< name=this->name; cloneResume->age=this->age; cloneResume->sex=this->sex; return cloneResume; } }; #endif

(2)main.cpp

#include "Prototype.h"
#include 
  
   
#include 
   
     void main() { Resume* a=new Resume("大鸟"); a->SetPersonalInfo("男","29"); a->SetWorkExperience("1998-2000","XX公司"); Resume* b=a->Clone(); b->SetWorkExperience("1998-2006","YY公司"); Resume* c=b->Clone(); c->SetPersonalInfo("男","24"); c->SetWorkExperience("1998-2003","ZZ公司"); a->Display(); b->Display(); c->Display(); delete a; delete b; delete c; a=b=c=NULL; system("pause"); }