读书人

原形模式浅复制和深复制

发布时间: 2012-08-16 12:02:15 作者: rapoo

原型模式浅复制和深复制

问题:现在"简历"对象里的数据都是string类型的,而string是一种拥有值类型的特点的特殊引用类型.
MemberwiseClone()方法是这样的:如果字段是值类型(int,double等),则该字段执行逐位复制;如果是引用类型(object,class,array),则复制引用但不复制引用的对象.

原形模式浅复制和深复制


原形模式浅复制和深复制

出现问题:
浅表复制:对于值类型没什么问题,但是对引用类型,就只是复制引用,对引用的对象那个还是指向了原来的对象,所以就会出现给jianli1,jianli2,jianli3三个引用设置"工作经历",但却同时看到三个引用都是最后一次设置,因为三个引用都指向了同一个对象.

原形模式浅复制和深复制原形模式浅复制和深复制

'浅复制',被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用都仍然指向原来的对象.
但现在我们需要把要复制的对象所引用的对象都复制一遍.希望jianli1,jianli2,jianli3三个引用对象都是不同的,复制时就是一变二,二变三,这种方式就是"深复制".


'深复制'把引用对象的变量指向复制过的新对象,而不是原有的被引用的对象.
深复制实现:

原形模式浅复制和深复制
原形模式浅复制和深复制

分析深复制:
两个类都实现ICloneable接口.首先工作经历类实现克隆的方法.然后在简历类中建立私有构造函数,这个构造函数提供Clone方法,以便克隆"工作经历"的数据;然后改写简历类中的Clone方法,先是调用私有构造函数,让"工作经历"克隆完成,然后再给这个"简历"对象的相关字段赋值,最终返回一个深复制的简历对象.


两段代码不同的地方,代码粗体部分

原形模式浅复制和深复制

原形模式浅复制和深复制

1楼liuyanlinglanq2小时前
自己顶一下

读书人网 >编程

热点推荐