原型模式——之浅复制与深复制

逆向实战:TikTok X-Gorgon算法解析与Unidg补环境技巧 本文详细解析了TikTok X-Gorgon算法的逆向工程全流程,包括参数定位、变种RC4算法还原及Unidbg补环境技巧。通过动态调试与静态分析相结合,揭示了X-Gorgon的生成逻辑和加密细节,为移动安全研究提供了实用指南。 阅读详情

我对原型模式的理解就是,你现在有一个对象,我要得到另一个跟你一模一样的对象,我要就完事了,中间的细节不关我的事

而说到原型模式,就必须了解下 浅复制与深复制 的概念了

浅复制与深复制都是原型模式实现的方式

浅复制:复制时对象中的成员为基本类型的复制值,引用类型的复制地址

浅复制:复制时对象中的成员为基本类型的复制值,引用类型的复制一个一模一样的空间

下面以简历的复印举例

有简历类与工作经验类

简历包含姓名,年龄与工作经验三个成员

工作经验包含工作时间段与工作的公司

如下:记得实现cloneable接口

 

然后测试

由下图很明显,复制后的对象的地址值跟原来的不一样,说明是两个对象

下面打印了本体与克隆体的成员,发现名字与工作经历都复制过来了

可是,继续往下看

当修本体的工作经历的公司名称时,发现克隆体的也随之改变

说明:这种复制就是浅复制,如果是成员是原始类型则会克隆值,但如果是对象则会克隆对象的地址

也就好像是我复印的简历上工作经验部分写的是: 同简历一

 

深复制实现:深复制就是当我复制后,我们就是两个完全独立的个体,就像拿一张简历再去复印一张,然后第二张上面修改信息,第一张没影响

怎样实现呢?

可能有人在spring配置文件中看到过 “prototype”,spring就是通过反射进行深复制的

对反射熟悉的话,实现很简单

然后就是序列化,这里我以序列化举例来实现深复制

修改Resume类中的clone方法,使之从浅复制变为深复制

说明:先创建一个字节数组输出流,将this也就是当前对象保存在里面,然后再用输入流读出来

 

测试:当我修改本体简历工作经验中公司名时,克隆体不受影响

效果如上图,实现了深复制,也就是我复印了一份简历

如果能看到这里也是真不容易了,老铁

欢迎提问,欢迎纠错,可以转载,但请注明本文链接

ADB 安装教程:如何在 Windows、 Linux 上安装 Android Debug Bridge 本文介绍了在Windows和Linux系统上安装ADB(Android调试桥)的方法。对于Windows系统:1)从官网下载ADB工具并解压;2)通过命令提示符验证安装;3)配置环境变量以实现全局使用;4)再次验证全局ADB功能。Linux系统可通过包管理器直接安装(如Ubuntu使用apt,Fedora使用dnf),安装后同样需验证版本信息确认成功。两种系统安装完成后,都能通过"adb version"命令检查安装状态。 阅读详情

相关推荐

Spring中常用的设计模式:原型模式

文章目录定义模式分析模式优缺点分析原型模式的实际应用案例 定义 原型模式:使用原型实例指定待创建对象的类型,并且通过复制这个原型来创建新的对象。 模式分析 在原型模式结构中定义了一个抽象原型类,所有的Java类都继承自java.lang.Object,而Object类提供一个clone()方法,可以将一个Java对象复制一份。因此在Java中可以直接使用Object提供的clone()方法来实现对...

蓝田日暖玉生烟 4386

【Simscape】用Simscape实现三维物理仿真(三)——创建一个滑块单摆系统

1 首先创建一个Simscape Multibody 模型 (方法见 【Simscape】用Simscape实现三维物理仿真(一)——创建一个自由落体小球) 2 创建四个Solid模块 (1)摆杆 Shape : Brick Dimensions : [0.1 0.05 1] m (2)摆杆轴 Shape : Cylinder Radius : 0.02 m Le...

ReadAir的专栏 9036

设计模式:原型模式介绍 && 原型模式的深拷贝问题

0、背景 克隆羊问题:有一个羊,是一个类,有对应的属性,要求创建完全一样的10只羊出来。 那么实现起来很简单,我们先写出羊的类: public class Sheep { private String name; private int age; private String color; //下面写上对应的get和set方法,以及对应的构造器 } 然后,创建10只一样的羊,就在客户端写一个代码创建: //原始羊 Sheep sheep = new Sheep("tom

LifeGoesOn 508

DVWA靶场实战:手把手教你绕过文件上传限制,用蚁剑连接一句话木马

本文详细介绍了在DVWA靶场中如何绕过文件上传限制并利用蚁剑连接一句话木马的实战技巧。通过分析文件上传漏洞原理、创建一句话木马、使用Burp Suite拦截修改请求以及配置蚁剑连接WebShell的全过程,帮助安全研究人员深入理解Web安全防护与攻击技术。

weixin_30335575的博客 90

CXL Virtual Hierarchy (VH) Enumeration理解

在 CXL 3.0 协议中,CXL Virtual Hierarchy (VH) Enumeration 是一种针对 CXL 虚拟层级(Virtual Hierarchy) 设计的设备枚举机制,它允许软件将物理连接的 CXL 设备抽象为多个逻辑层级(虚拟层级),从而实现更灵活的资源管理和拓扑扩展。与传统的 PCIe 枚举相比,CXL VH 枚举在协议特性、拓扑抽象和资源分配机制上有显著差异。本质:VH 是一个逻辑上的设备层级结构,可能与物理连接拓扑不同。

Summer的博客 1002

Bean的作用域中prototype原型模式(浅拷贝和深拷贝)

在Spring中Bean有五个作用域,其中singleton和prototype分别是单例模式和原型模式。 这里讲一下单例模式和原型模式,进行整理方便我复习。 spring中bean的创建实际就是两种:单例模式和原型模式。(原型模式需要和工厂模式搭配起来) 一、原型模式 原型模式是23种设计模式的其中一种。  在创建对象时通过new关键字创建的对象 (类加载判断,内存分配,初始化等),在我们需要大...

qq_37432174的博客 2186

解决k8s核心组件calico pod资源不创建问题

解决k8s核心组件calico pod资源不创建问题 1.问题描述 由于K8S集群Master节点故障,导致calico网络组件虽然处于Running状态,但是一直无法准备就绪,如下图所示 calico-node-lpt7h运行在master节点,第一时间紧急处理方法就是将其pod删除,让K8S自动重建该pod,使整个集群快速恢复 但是就当我将calico-node-lpt7h pod删除后,该pod始终无法自建,就好像是从来没有这个pod似的 2.解决方法 期初排查时,我觉得可能是由于当前master

江晓龙的博客 4807

原型模式(深拷贝和浅拷贝)

原型模式概念 原型模式,其实就是拷贝对象的意思,如何拷贝一个对象? 最普通的方式就是再new一个,然后将需要被拷贝对象的所有属性一个一个复制到新对象中。这种方式显然效率极低,如果对象的属性特别多呢?一个个写不疯掉了? 因此,Java中提供了原型模式,就是用来拷贝对象使用的。 源码中的案例 在Spring框架中,创建bean的时候,有个标签,让你选择是: Prototype Singleton 其中Singleton指的是单例模式 而Prototype就是原型模式的意思,意思是,Spring容器中这个对象是按

weixin_43923436的博客 987

基于3D相机的人体穴位识别与标注系统——完整Python实现方案

摘要 本文提出了一种基于3D相机的人体穴位识别与标注系统完整实现方案。系统采用Intel RealSense D435相机实时采集RGB-D数据,结合MediaPipe Pose模型进行人体33个关键骨骼点的三维姿态估计。通过建立穴位与骨骼关键点的映射关系,利用相机内参和深度信息将二维图像坐标转换为三维空间坐标。系统采用模块化设计,包含数据采集层、算法处理层、坐标转换层和可视化层,实现了穴位定位、三维坐标转换和点云可视化功能。关键技术包括:基于骨度折量法的穴位映射算法、深度图像到三维点云的转换方法,以及Op

AI的内部世界的博客 271

Python爬虫-汽车之家各车系月销量榜数据

本文是该专栏的第41篇,后面会持续分享python爬虫干货知识。本文以某汽车平台为例,基于python采集该平台“各车系月销量”的榜单数据。具体实现思路和详细逻辑,笔者将在正文结合完整代码进行详细介绍。接下来,跟着笔者直接往下看正文详细内容。(附带完整代码)

Python进阶专栏《爬虫实战进阶》,《Pyppeteer从入门到精通》原创作者 1619

(4)spring常用模式--------原型模式

(4)spring常用模式--------原型模式  Mrsunup 关注 2018.09.02 12:38* 字数 807 阅读 48评论 0喜欢 0 原型模式就是从一个对象再创建另外一个可定制的对象, 而且不需要知道任何创建的细节。 所谓原型模式, 就是 Java 中的克隆技术, 以某个对象为原型。 复制出新的对象。 显然新的对象具备原型对象的特点, 效率高(避免了重新执行构造过程步骤)...

evilcry2012的专栏 472

行人检测模型在海思平台上的部署:从 PyTorch 到 NNIE 深度优化与实践

摘要 本文详细介绍行人检测模型从PyTorch到海思NNIE平台的部署流程。首先分析了行人检测面临的挑战(尺度变化、遮挡、姿态多样性等)及边缘部署的优势(实时性、隐私保护等)。重点阐述了模型转换过程:PyTorch→ONNX→Caffe→NNIE-WK,其中PyTorch转ONNX需注意评估模式设置、虚拟输入匹配、操作集版本选择等关键点。文章旨在帮助开发者在海思3516D芯片上实现高效的行人检测,克服部署过程中的常见问题,最终实现边缘设备的实时目标检测能力。

FJN110的博客 216

原型模式与深复制浅复制小结

一、原型模式 原型模式就是从一个对象再创建另一个可定制的对象,而且不需要知道任何创建的细节。 二、基本的原型模式 这里模拟简历的创建与复制来说明原型模式的应用。 class Resume implements Cloneable{ private String name; private String sex; private String age;...

weixin_30591551的博客 158

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

小谈原型模式 | 深复制与浅复制

深复制、浅复制,一文了解原型模式一、前言二、原型模式的运用场景和解释三、先看看这几个简单的程序每次新建一份简历我都new一下直接引用不复制了(错误)不想复制的时候new对象了对副本进行简单的修改引用类型就不能做自己么引用类型的变化四、浅复制和深复制的区别五、值类型和引用类型的区别六、参考资料七、关于本系列的解释 一、前言 看了上一期的单例模式之后,是不是可以应对一些简单的面试题目了,我相信你可以...

qq_35764460的博客 198

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

原型模式 浅复制与深复制

原型模式(Prototype): 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。 这里我用Java来给大家介绍一下它的基础使用。 基础示例: 说明:在Java中自定义类的对象可以被复制,自定义类就必须实现Cloneable中的clone()方法,而在.NET中便是实现ICloneable接口其中的唯一方法Clone()方法 原型类 public abstract cl...

EiletXie的博客 544

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

【大话设计模式】模式四:原型模式与浅谈Cloneable浅复制、深复制

一、原型模式 原型模式(Prototype),用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。 原型模式(Prototype)结构图 : Prototype原型类,声明一个克隆自身的接口。 ConcretePrototype具体原型类,实现一个克隆自身的接口。 【代码实现】: Prototype类 public abstract class Prototype { private String id; public Prototype(Stri.

m0_46013789的博客 1110

原型模式与浅复制深复制(九)

一、定义    用原型实例指定创建对象的种类, 并且通过拷贝这些原型创建新的对象。原型模式是和单例模式一样很简单的一种设计模式。二、优点    1.性能优良    原型模式是在内存二进制流的拷贝, 要比直接new一个对象性能好很多, 特别是要在一个循环体内产生大量的对象时, 原型模式可以更好地体现其优点。    2.避免了反复的相同赋值操作    例如有一个 Mail 类,现在创建了一个实例对象 ...

阿飞的博客 733

java自我复制_原型模式--自我复制(结合Java浅复制与深复制)

原型模式,字面上的理解,以原型为标杆的模式。原型模式其实就是从一个对象再创建另外一个可定制对象,而且不需知道任何创建的细节。我们可以用原型示例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。Java里面一个比较典型的就是Cloneable接口,通过实现Cloneable接口,我们可以进行对象的复制,这里当然就会讲到浅复制与深复制。首先来看看原型模式的类图吧: 这里的Prototype是个基础...

weixin_39922929的博客 310

原型模式--自我复制(结合Java浅复制与深复制)

原型模式,字面上的理解,以原型为标杆的模式。 原型模式其实就是从一个对象再创建另外一个可定制对象,而且不需知道任何创建的细节。 我们可以用原型示例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。 Java里面一个比较典型的就是Cloneable接口,通过实现Cloneable接口,我们可以进行对象 的复制,这里当然就会讲到浅复制与深复制。 首先来看看原型模式的类图吧: 这

anLA_的专栏 863

设计模式学习--原型模式(深复制与浅复制)

原型模式,用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。   原型模式就是从一个对象再创建另外一个可定制的对象,而且不需要知道任何创建的细节。   其实,原型模式就是在原有的类中增加一个克隆函数,克隆一个和自身一样的对象。这其中就涉及到了深复制和浅复制,浅复制:被复制的对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用都仍然指向原来的对象。深复制:把引

hjf161105的博客 463

(C#)原型模式—深复制与浅复制

1.原型模式   用原型实例指定创建对象的实例,并且通过拷贝这些原型创建新的对象。 *原型模式隐藏了创建对象的细节,提高了性能。 *浅复制:被复制对象的所有变量都含有与原来对象相同的值,而且所有对其他对象的引用都指向了原来的对象。 *深复制:被复制对象的引用指向了新的对象,而不是原有的被引用的对象。 *.NET提供IConeable接口下的唯一方法Clone可以便捷的完成...

155

JohnConnor设计模式笔记(二) 程序世界里的复印机-原型模式与浅复制/深复制

-从这篇开始首先会分析的是设计模式中5个创建型模型的一些学习心得,文章最后会附上目录与进度表,希望大家多多支持多多推荐。   在没有复印机的时代,如果是你跑去西天取经,你觉得佛祖会让你直接把经书拉回家么,咱没金蝉子那么大的面子么....   必然的结果就是抄书。你抄个十年八载的拉回大唐,原手抄版得保留作为典籍,但为了弘扬大乘佛法,就又得抄书,抄个几十万册然后分发给各大寺院。   在...

diaoqin4202的博客 218

设计模式(Java)----原型模式Prototype(包含深复制与浅复制)

例题:定义一个简历类,必须有姓名,可以设置性别和年龄,可以设置工作经历。最终需要写三份简历。 一、基本代码(我们一开始会想到的代码) class Resume{ private String name; private String sex; private String age; private String timeArea; private St...

jiahuier的博客 248

原型模式(创建型模式)深复制与浅复制区别

定义 原型模式:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象 浅复制:被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用都仍然只想原来的对象。 通俗的来说:对值类型的成员变量进行值的复制,对引用类型的成员变量只复制引用,不复制引用的对象。 深复制:把引用的变量指向复制的新对象,而不是原有的被引用的对象。 通俗的来说:对值类型的成员变量进行值的复制,...

持续学习,共同进步 962

原型模式——浅复制与深复制

原型模式涉及一个浅复制和深复制的概念。原型模式可以简单理解为“复制”,但这个复制不是代码的复制。对同一个类,我们可以实例化new三次来“复制”,但如果在初始化的时候构造函数的执行很长,多次实例化就显得效率很低效了。那我们能否只实例化一次,然后“复制”呢? Test test1 = new Test(); Test test2 = test1; Test test3 = test1; ...

weixin_34329187的博客 81
上一篇: 单例模式之饿汉式,懒汉式,最牛逼单例模式,枚举,注册登记式及反序列化如何保证单例
下一篇: POI中文API文档
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我才是真的封不觉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值