原型模式

克隆以后我就成了你——探究原型模式 孙悟空拔一根毫毛就可以变出好多一模一样的孙悟空!!!中国的克隆技术其实是世界领先的! 即便Jungle读书少,Jungle也清晰地记得中学生物课本上提到过的克隆羊“多利”。虽然多利寿命不长,但它的出现对“克隆(Clone)”技术意义重大。克隆,直观说就是从原有生物体上取体细胞,然后无性繁殖出有完全相同基因的个体或种群。这么说来中国的克隆技术其实是世界领先的,因为孙悟空拔一根毫毛变出许多一模一... 阅读详情

        原型模式就是从一个对象再创建另一个可定制的对象,而且不需要知道任何创建的细节。书中的定义为:原型模式(Prototype),用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。

        个人理解为定义一个抽象接口Prototype,然后在其中定义一个纯虚函数Clone。再定义一个创建原型的类concretePrototype来定义属性并实现Clone方法,克隆自身并返回新的对象。

        其中由于C++ 中没有ICloneable接口,所以我们可以通过拷贝构造函数去实现对象的拷贝,这里又涉及到浅拷贝和深拷贝。深拷贝和浅拷贝的定义可以简单理解成:如果一个类拥有资源(堆,或者是其它系统资源),当这个类的对象发生复制过程的时候,这个过程就可以叫做深拷贝,反之对象存在资源,但复制过程并未复制资源的情况视为浅拷贝。也就是浅拷贝并没有创建资源,而是新的对象指针指向原来的对象,并且公用空间,而深拷贝就是创建新的空间,并把要拷贝对象的值拷贝过来。

       下面为实践的代码:

#include "stdafx.h"
#include <iostream>
#include <string>
using namespace std;

class Prototype
{
	public: 
	   virtual Prototype *Clone()=0; 
};

class resume : public Prototype
{
	public:
		resume(){}
		resume(string name)
		{
		  this->name = name;
		}

		resume(resume &re)
		{
			this->name = re.name;
			this->sex = re.sex;
			this->age = re.age;
			this->timeArea = re.timeArea;
			this->company = re.company;
		}

	    void SetPersonalInfo(string sex,string age)
		{
			this->sex = sex;
			this->age = age;
		}

		void SetWorkExperience(string timeArea,string company)
		{
			this->timeArea = timeArea;
			this->company = company;
		}

		void Display()
		{
		   cout<<name<<" "<<sex<<" "<<age<<endl;
		   cout<<"工作经历:"<<timeArea<<" "<<company<<endl;
		}

		Prototype *Clone()
		{
		   return new resume(*this);
		}

	private:
		string name;
		string sex;
		string age;
		string timeArea;
		string company;
};

int _tmain(int argc, _TCHAR* argv[])
{
	resume *a = new resume("dada");
	a->SetPersonalInfo("man","23");
	a->SetWorkExperience("2008-2012","Microsoft");

	resume *b =(resume *)a->Clone();
	b->SetPersonalInfo("man","23");
	b->SetWorkExperience("2010-2012","Microsoft");

	a->Display();
	b->Display();

	system("pause");
	delete a;
	delete b;
	return 0;
}

         原型模型主要的优点是:在一般初始化的信息不发生变化的情况下,隐藏了对象创建的细节。

         但是C#中说的可以不执行构造函数而动态地获得对象运行的状态这一点我就有点迷糊了?C++中也能这样吗?要是这样真的可以大大提高性能,尤其是在一些构造函数执行时间较长的情况下。

Java 原型模式 文章目录原型模式原型模式Demo使用原型模式的好处浅克隆和深克隆浅克隆深克隆 原型模式 原型模式属于创建型模式,用原型实例指定待创建对象的类型,并且通过复制这个原型来创建新的对象!(但是学姐是不可复制的哦,只有我这里有,还不赶快关注我的 Java精选频道 ) 原型模式Demo 下了几次棋,学弟把学姐征服了多少次?这里是以次为单位,我们需要把这个枢纽创建出来,为下棋计单位! /** * 枢纽:... 阅读详情

相关推荐

STM32H7B0VBT6使用Free RTOS配置SD卡+Fatfs文件管理系统

STM32H7B0VBT6使用Free RTOS配置SD卡+Fatfs文件管理系统,记录配置过程

Jack的小窝 5942

JAVA设计模式——【原型模式】

原型模式 克隆羊问题 现在有一只羊 tom,姓名为: tom,年龄为:1,颜色为:白色,请编写程序创建和 tom羊属性完全相同的10只羊。 传统方式解决克隆羊问题 思路分析(图解) 代码演示: public class Sheep { private String name; private int age; private String color; public Sheep(String name, int age, String color) { super(); .

龍弟-idea的博客 7956

认知网络分析实战:用Python复现课堂对话研究(含LSA代码)

本文通过Python实战,详细演示了如何运用认知网络分析(ENA)和滞后序列分析(LSA)两种方法,对课堂对话数据进行深度挖掘。文章提供了从数据清洗、行为编码到网络构建、序列统计及可视化的完整代码流程,帮助教育研究者和数据分析师量化分析对话中的认知结构与动态互动模式,从而获得超越文本表面的研究洞见。

weixin_28559803的博客 155

【原型模式】原型模式深入分析

原型模式深入分析,浅拷贝,深拷贝

乘风破浪的程序猿 464

ESP32 LVGL开发板例程使用记录:自制常用汉字字库(二)

1、将下载的文件移入工程文件中 ,路径为项目文件中 ”......\lib\lvgl\src\font“文件夹下。3、修改字库配置文件,文件名为lv_conf.h中的内容,向其中加入下面内容(位置可搜索注释块来找到地方)修改完成可以编译试试,看是否成功,如字库较大时编译出错,请使能:LV_FONT_FMT_TXT_LARGE。2、打开此文件,修改包含头文件的路径,不然会报错,修改方法可对照自己库中其他字库文件中的包含路径。导入完成后在VSCode工程中可以查看到此文件。上次说完了如何制作 字库.c 文件。

qq_43279097的博客 1957

详解Numpy中的transpose方法

最近在学Numpy碰到了关于数组转置和换轴的概念,尤其是对tanspose方法有些疑惑,尤其是多维,查了不少资料,终于搞懂了。 Numpy数组的轴(axis) 所谓的**轴(axis)**可以理解为数组的维度。 具体而言,二维数组就是有两个维度,如果从空间上看,它就是一个平面,由x轴和y轴构成,而与此相对应的,该二维数组就有两个轴,x轴对应0轴,y轴对应1轴。 同理,三维数组有三个维度,空间上...

BlankGrid的博客 936

详解原型模式

原型模式是一种创建型设计模式,其核心思想是通过复制现有的对象来创建新的对象,而不是通过传统的构造函数来创建对象。这种模式允许用户指定创建对象的种类,并通过拷贝这些原型来创建新的对象。 原型模式的主要优点包括: 提高性能:通过复制现有对象,可以避免重复创建对象的开销,特别是在需要频繁创建相似对象的场景中,原型模式能够显著提高性能。 简化对象创建过程:不需要知道具体的类信息,只需复制一个已经存在的实例即可创建新对象,从而简化了对象的创建过程。 原型模式适用于以下场景: 创建成本高或复杂的对象:当对象的创建

如无必要,勿增实体。 1537

别再手动调时间了!用Windows自带的tzutil命令,1分钟搞定时区错误

本文介绍了如何使用Windows自带的tzutil命令快速解决时区错误问题。通过简单的命令行操作,用户可以一键切换时区、查看全球时区代码库,并实现自动化时区同步。相比传统GUI设置,tzutil更可靠且高效,特别适合企业环境批量部署。

weixin_42531494的博客 314

设计模式之原型模式

采用 “原型模式” 重构邮件类 Mail,使每次发送新的邮件时,不用new 创建新的Mail 对象,2)复杂的依赖场景, 比如,F 对象的创建依赖 A,A 又依赖 B,B 又依赖 C……不采用设计模式,实现发送广告信,每次发送邮件时,需要new 创建一个新的Mail对象,同的工厂等级结构(具体工厂对应具体产品),而原型模式就不需要这样,原型模式的。产品复制是通过封装在原型类中的克隆方法实现的,无须专门的工厂类来创建产品。1)当创建新的对象实例较为复杂时,使用原型模式可以简化对象的创建过程,通过复制一。

liang8999的博客 1579

Android 11.0 app添加校验锁(输入密码才能进入app)

11.0定制化开发中客户要求给app添加锁,就是点击app 图标时,会弹出Dialog,需要输入密码才能进入app中,就是应用校验锁, 最开始想到在Launcher3中实现,但是如果更换了默认Launcher 又不行了 所以最终还是得拦截app启动Activity 从这里入手了 Launcher与APP是在两个不同的进程中,他们之间的通信是通过Binder完成的,点击Launcher上的某个APP,这时会调用Launcher的startActivitySafely方法。 public boolean sta

安卓兼职framework和app工程师的博客 1952

Python进阶005:修改Jupyter Notebook的工作路径

1、Jupyter Notebook简介 2、修改Jupyter Notebook的工作路径 如下三个步骤: 一、安装notebook 在CMD命令行中输入: pip install notebook 二、启动notebook jupyter notebook 启动后发现是在你的用户目录下,如下图所示,但是该目录下有很多的其他文件或文件夹,因此我想把这个环境切换到我单门创建的一个文件夹中。 三、创建notebook的配置文件 在CMD命令行中执行: jupyter notebook --genera

若北辰 1386

对原型模式的理解

如User的ak字段。

南七行者的博客 741

一步步带你用C#开发Modbus通信上位机(附完整代码与工程思路)

Modbus上位机开发指南(C#实现) 本文详细介绍使用C#开发Modbus上位机系统的全过程,覆盖RTU和TCP两种协议。内容包含:1)需求分析与技术选型(WinForms+NModbus4);2)分层架构设计(UI/业务/通信层);3)通信层核心代码实现(串口/以太网连接、数据读写);4)功能模块开发(设备管理、数据采集、远程控制)。提供可直接复用的Modbus RTU客户端代码示例,包含连接管理、线圈读写、寄存器操作等工业场景必备功能。通过系统化的开发流程,帮助开发者快速构建稳定可靠的Modbus监控

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 820

原型模式介绍

文章目录1、定义与特点定义优点缺点2、结构与实现2.1、模式的结构2.2、模式的实现浅克隆模式深克隆模式3、应用场景参考 1、定义与特点 定义 ​ 原型(Prototype)模式,用一个已经创建的实例作为原型,通过复制该原型对象来创建一个和原型相同或相似的新对象。在这里,原型实例指定了要创建的对象的种类。用这种方式创建对象非常高效,根本无须知道对象创建的细节。例如,Windows 操作系统的安装通常较耗时,如果复制就快了很多。在生活中复制的例子非常多,这里不一一列举了。 优点 Java自带的原型模式基于内

FanGer的博客 1798

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

原型模式的优点

测试原型模式的效率 package cn.com.prototype; public class TestPrototypeEfficiency { public static void testNew(int count) { long start = System.currentTimeMillis(); for (int i = 0; i < ...

weixin_44007988的博客 1322

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

上一篇: 工厂方法模式
下一篇: 排序算法的总结
decajes
博客等级 码龄17年 43粉丝 29原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值