克隆模式
简介
深入理解克隆模式,出现的意义在于反复创建一样的对象,影响JAVA程序的效率。
克隆模式的优势在于底层调用了C,实现了内存之间的复制。
克隆模式区分:
1.浅克隆:在复制对象的时候里面的对象也是一起复制的过来,即调用的还是同一内存对象。
2.深克隆:里面内存对象是重新创建一份的
使用区别:
浅克隆在修改母对象的时候,子对象也会修改响应的赋值;深克隆则不会影响响应的赋值
Note:基本类型没有浅copy,都是深copy(新创建一个对象)
浅克隆
实现copy必须要实现Cloneable的接口,调用的native的方法。
//需要实现Clone,必须要实现Cloneable的接口(标记接口)
@Data
public class Car implements Cloneable{
private String name;
private Date createTime;
@Override
public Object clone(){
try {
return super.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
return new Car();
}
}
在使用过程中完全copy对象,引用地址也copy过来(基础类型不包括)
深克隆
实现深copy有好几种方法,序列化反序列化是一种方法。
第二种方法是clone的过程中实现创建新的对象(原理是引用一个新的对象,这样执行复制的时候就是新的对象了和老对象完全脱离关系)
public Object clone(){
try {
Date date=new Date();
date.setTime(this.getCreateTime().getTime());
DeepCopyCar deepCopyCar = (DeepCopyCar) super.clone();
//修改内存对象为新的Date对象
deepCopyCar.setCreateTime(date);
return deepCopyCar;
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
return new Car();
}