浅克隆和深克隆
这是原型设计模式
当我们拥有一个对象 obj_01 的时候,我们想通过拷贝这个对象来得到另一个对象 obj_02,类似于复制粘贴功能。这个过程叫做【克隆】,这个模型就叫做原型模式。
细分有2种:浅克隆、深克隆
浅克隆。java 中每个对象都是 Object.java 的子类,Object 有一个方法 clone(),所以每个类都可以通过 super.clone()方法来实现浅克隆。浅克隆会给新对象一个新的内存地址,但是新对象引用类型的成员变量的地址仍然不会改变。待克隆的类必须实现接口 Cloneable,否则会抛出异常
深克隆。深克隆是相较浅克隆而言的,它不仅会改变克隆后新对象的内存地址,它还会给新对象的每一个成员变量重新分配内存地址(即使该成员变量为引用类型)。也就是说新对象和老对象在内存的占用上已经完全不同了,没有任何共用的地方。
浅克隆的实现
@Override
protected Object clone() {
Object clone=null;
try {
clone= super.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
return clone;
}
深克隆的实现
@Override
protected Object clone() {
Object clone = null;
try{
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(baos);
oos.writeObject(this);
ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
ObjectInputStream ois = new ObjectInputStream(bais);
clone=ois.readObject();
}catch(Exception e){
e.printStackTrace();
}
return clone;
}
浙公网安备 33010602011771号