原型模式

来源:互联网 发布:电影语音翻译软件 编辑:程序博客网 时间:2024/06/04 19:58

1、概念

原型模式是一种对象创建型模式,它采取复制原型对象的方法来创建对象的实例,使用原型模式创建的实例,与原型具有一样的数据。

 

(1)、由原型对象自身创建膜表对象

(2)、目标对象是原型对象的一个克隆

(3)、根据对象克隆深度层次的不同,有浅度克隆和深度克隆。

2、适用情况:

一个复杂对象,具有自我复制功能,统一一套接口。

3、代码实例:

 

#include<iostream>#include<string>using namespace std;class Person{public:virtual Person*clone()=0;virtual void printT() = 0;};class CPlusPlusProgram:public Person{public:CPlusPlusProgram(){m_name = "";m_age = 0;m_p = NULL;setReMeme("");}CPlusPlusProgram(string name, int age,char *p){m_name = name;m_age = age;m_p = NULL;setReMeme(p);}// 浅拷贝Person *clone(){CPlusPlusProgram *tmp = new CPlusPlusProgram;*tmp = *this;return tmp;}void setReMeme(char *p){if (m_p!=NULL){delete m_p;}m_p = new char[strlen(p) + 1];strcpy(m_p,p);}// 深拷贝Person *clone(){CPlusPlusProgram *tmp = new CPlusPlusProgram;tmp->m_name = this->m_name;tmp->m_age = this->m_age;int len = strlen(this->m_p);if (tmp->m_p != NULL){delete tmp->m_p;tmp->m_p = NULL;}tmp->m_p = new char[len + 1];strcpy(tmp->m_p, this->m_p);return tmp;}void printT(){cout << "m_name: " << m_name << "  m_age: " << m_age<<"  m_p: " <<&m_p<< endl;}private:string m_name;int m_age;char *m_p;};int main(void){Person *c1 = new CPlusPlusProgram("张三",20,"AAA");c1->printT();Person *c2 = c1->clone();c2->printT();return 0;}

原创粉丝点击