C++23种设计模式(5)-原型模式
原型模式的定义为:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。下面给出原型模式代码:#include<iostream>using namespace std;//父类class Resume{protected:char *name;public:Resume() {}virtual ~Resume() {}virtual Resume* Clone() { re
·
原型模式的定义为:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。
下面给出原型模式代码:
#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;
}
运行后结果如下:

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