设计模式----原型模式(C++实现)
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<string>
using namespace std;
class Person
{//抽象类提供接口
public:
virtual Person *Clone() = 0;//返回基类指针
virtual void printT() = 0;
};
class JavaProgrammer : public Person
{
private:
string m_name;
int m_age;
char *m_resume;
public:
JavaProgrammer()//无参构造函数
{
this->m_name = "";
this->m_age = 0;
m_resume = NULL;
}
JavaProgrammer(string name, int age)//有参构造函数
{
this->m_name = name;
this->m_age = age;
m_resume = NULL;
}
~JavaProgrammer()
{
if (m_resume != NULL)
{
free(m_resume);
m_resume = NULL;
}
}
virtual Person *Clone()//实现自我复制功能
{
JavaProgrammer *p = new JavaProgrammer;
*p = *this;//在这里只是简单赋值操作,没有遇到深拷贝 和 浅拷贝的问题
return p;
}
void setResume(char *resume)
{
m_resume = new char[strlen(resume) + 1]; //因为是字符串末尾多一个'\0'
strcpy(m_resume, resume);
}
virtual void printT()
{
cout << "m_name:" << m_name << "\t" << "m_age:" << m_age << endl;
if (m_resume != NULL)
{
cout << m_resume << endl;
}
}
};
void main()
{
JavaProgrammer javaperson1("李四", 160);
javaperson1.setResume("我是C++程序员");//字符串操作,使用函数完成初始化操作。注意字符串操作的时候要进行'\0''
//如果不使用这个函数进行封装,那么就会出现深拷贝和浅拷贝的问题
//如果没有这个函数,那么在指针自我拷贝的时候吗,我们就要把内存给创建出来,然后在去进行赋值操作
javaperson1.printT();//自己打印自己的信息
Person *p2 = javaperson1.Clone(); //对象具有自我复制功能 注意深拷贝和浅拷贝问题
p2->printT();
delete p2;
system("pause");
}
思路来源: 传智博客---王保明
设计模式----原型模式(C++实现)相关推荐
- 设计模式 原型模式_创新设计模式:原型模式
设计模式 原型模式 原型模式用于创建对象的副本. 这种模式非常有用,特别是当从头开始创建对象的成本很高时. 与builder , factory和abstract factory模式相比,它不会从头开 ...
- 设计模式 原型模式_设计模式:原型
设计模式 原型模式 创新设计模式之一是原型设计模式 . 尽管原型是创造模式,但它在概念上与其他模式有所区别. 我的意思是原型在某种意义上创造了自己. 我将在下面解释. 原型模式的所有魔力都基于Java ...
- 设计模式 原型模式_原型设计模式:创建另一个小车
设计模式 原型模式 创建对象确实是一个耗时的过程,也是一件昂贵的事情. 因此,我们现在正冒险节省时间和金钱. 我们该怎么做? 克隆奇迹多莉 有人记得多莉吗? 是的,是绵羊,是第一个被克隆的哺乳动物. ...
- Java常用设计模式————原型模式(一)
介绍 原型模式(Prototype Pattern):用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象. 原型模式用于创建重复的对象,同时又能保证性能.当直接创建对象的代价比较大时,则采用 ...
- 第六章 Caché 设计模式 原型模式
文章目录 第六章 Caché 设计模式 原型模式 定义 使用场景 优点 结构图 描述 示例 初级写法 缺点 中级写法 缺点 高级写法 (浅复制) 浅复制 深复制 完整示例 简历类(复制类) 对象类(工 ...
- C++设计模式——原型模式(Prototype Pattern)
C++设计模式--原型模式(Prototype Pattern) 微信公众号:幼儿园的学霸 目录 文章目录 C++设计模式--原型模式(Prototype Pattern) 目录 定义 代码示例 普通 ...
- 设计模式---原型模式(Prototype Pattern)
在编程中有时候我们会发现,当我们需要一个实例,可是这个实例的创建过程十分复杂,在执行过程中 会消耗大量的时间,同时创建第一个实例和创建第二个时间的初始化信息并未改变.在此种情况下,直接New 一个实例 ...
- 精通python设计模式-浅谈Python设计模式 - 原型模式
声明,本系列文章主要参考<精通Python设计模式>一书,并且参考一些资料,结合自己的一些看法来总结而来. 在<精通Python设计模式>中把设计模式分为三种类型: 创建型模式 ...
- [设计模式]原型模式
简介 原型模式 (Prototype)用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象. 原型模式是一种对象创建型模式 (可参考 设计模式 创建型模式). 结构 图-原型模式结构图 Pr ...
- Java设计模式——原型模式
概述 原型模式是为了解决一些不必要的对象创建过程.当Java JDK中提供了Cloneable接口之后,原型模式就变得异常的简单了.虽然由于Cloneable的引入使用程序变得更简单了,不过还是有一些 ...
最新文章
- 为ThinkPad T420增加一根4G内存
- 是否可以在Gradle中声明一个可用于Java的变量?
- 安装TensorRT,然后导入uff库包的时候报错:ImportError: ERROR: Failed to import module(cannot import name ‘GraphDef`)
- 基于计算机的控制系统,基于计算机的机械控制系统实现方式研究.pdf
- MATLAB编辑GUI界面
- 基于概率的项目相似度之并行方法
- 不做别人思想的“跑马场”(人民论坛)
- apollo配置中心搭建
- span width无效
- 西门子Step7安装和入门初步
- 【数据挖掘算法】(一)MSET 算法
- 基于三星6.0.1的Xposed模块安装以及模拟位置的安装
- 百度笔试题--论坛数据库表设计
- 智能家庭本周锋闻:小米终于还是做了空气净化器
- 核只有单位元等价于映射是单射
- Excel如何筛选数据重复项?
- BitComet(比特彗星)64位 V1.57
- 量子计算基础(学习笔记)
- cpm自动SEO写文章 关键词文本生成工具3.0版本
- 红外对管应该如何选择比较好