原型模式的定义为:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。
下面给出原型模式代码:

#include<iostream>
using namespace std;

//父类
class Resume
{
protected:
	char *name;
public:
	Resume() {}
	virtual ~Resume() {}
	virtual Resume* Clone() { return NULL; }
	virtual void Set(char *n) {}
	virtual void Show() {}
};
//子类A
class ResumeA : public Resume
{
public:
	ResumeA(const char *str);  //构造函数
	ResumeA(const ResumeA &r); //拷贝构造函数
	~ResumeA();                //析构函数
	ResumeA* Clone();          //克隆,关键所在
	void Show();               //显示内容
};
ResumeA::ResumeA(const char *str)
{
	if (str == NULL) {
		//空字符串也必须包含一个字符串结束字符
		name = new char[1];
		name[0] = '\0';
	}
	else {
		name = new char[strlen(str) + 1];
		strcpy(name, str);
	}
}
ResumeA::~ResumeA() { delete[] name; }
ResumeA::ResumeA(const ResumeA &r) {
	name = new char[strlen(r.name) + 1];
	strcpy(name, r.name);
}
ResumeA* ResumeA::Clone() {
	return new ResumeA(*this);
}
void ResumeA::Show() {
	cout << "ResumeA name : " << name << endl;
}

//子类B
class ResumeB: public Resume
{
public:
	ResumeB(const char *str);  //构造函数
	ResumeB(const ResumeB &r); //拷贝构造函数
	~ResumeB();                //析构函数
	ResumeB* Clone();          //克隆,关键所在
	void Show();               //显示内容
};
ResumeB::ResumeB(const char *str)
{
	if (str == NULL) {
		name = new char[1];
		name[0] = '\0';
	}
	else {
		name = new char[strlen(str) + 1];
		strcpy(name, str);
	}
}
ResumeB::~ResumeB() { delete[] name; }
ResumeB::ResumeB(const ResumeB &r) {
	name = new char[strlen(r.name) + 1];
	strcpy(name, r.name);
}
ResumeB* ResumeB::Clone() {
	return new ResumeB(*this);
}
void ResumeB::Show() {
	cout << "ResumeB name : " << name << endl;
}

int main()
{
	Resume* r1 = new ResumeA("A");
	r1->Show();
	Resume* r2 = new ResumeB("B");
	r2->Show();

	//调用克隆函数
	Resume* r3 = r1->Clone();
	Resume* r4 = r2->Clone();
	//删除r1 r2
	delete r1;
	delete r2;
	r1 = r2 = NULL;
	//深拷贝所以r3 r4无影响
	r3->Show();
	r4->Show();
	delete r3;
	delete r4;
	r3 = r4 = NULL;
	getchar();
	return 0;
}

运行后结果如下:
在这里插入图片描述

Logo

GitCode 天启AI是一款由 GitCode 团队打造的智能助手,基于先进的LLM(大语言模型)与多智能体 Agent 技术构建,致力于为用户提供高效、智能、多模态的创作与开发支持。它不仅支持自然语言对话,还具备处理文件、生成 PPT、撰写分析报告、开发 Web 应用等多项能力,真正做到“一句话,让 Al帮你完成复杂任务”。

更多推荐