设计模式之原型模式(附带深拷贝、浅拷贝知识点)

用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象

原型模式其实就是从一个对象再创建另一个可定制的对象,而且不需知道任何创建的细节

代码:

借鉴代码1:

借鉴代码2:

展示效果:

好处:

浅复制与深复制

--MemberwiseClone()方法:如果字段是值类型的,则对该字段执行逐位复制,如果字段是引用类型,则复制引用但不复制引用的对象;因此,原始对象及其复本引用同一对象。也就是说引用的对象数据是不会被克隆过来的---

可以去看MemberwiseClone()的MSDN帮助

浅表复制对于值类型没有问题,对于引用类型,只能复制引用,对引用的对象还是指向了原来的对象,所以就会出现a、b、c三个引用设置‘工作经历’,但却同时看到三个引用都是最后的一次设置(zz企业),因为是那个引用都指向了同一个对象,这个原因叫做浅复制’被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用都仍然指向原来的对象。但我们可能更需要这样的一种需求,把要复制的对象所引用的对象都复制一遍

比如刚才的例子,我们希望是a,b,c三个引用的对象都是不同的,复制时就一变二,二变三,此时,我们就叫这种方式为深复制’,深复制把引用对象的变量指向复制过的新对象,而不是原有的被引用的对象

简历的深复制实现

由于在一些特定场合,会经常涉及深复制或浅复制,eg:数据集对象DataSet,它就有Clone()方法和Copy()方法,Clone()方法用来复制DataSet的结构,但不复制DataSet的数据,实现了原型模式的浅复制。Copy()方法不但复制结构,也复制数据,其实就是实现了原型模式的深复制。

本人使用的是语雀笔记,有一些公开的知识点库,大家有需要的可以去看一看,如果感觉对你有用的话希望能点个关注,谢谢。

链接傲仙 · 语雀

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值