前言
原型模式(Prototype Pattern),核心思想是用原型实例复制出新实例对象,在java中通过Object中的clone方法进行对象的复制,当我们需要类实例可复制时,该类要实现Cloneable标志性接口,用于标明该类实例是可复制的,否则,当我们调用该类实例的clone方法时,会抛出CloneNotSupportedException异常。
深拷贝与浅拷贝
对于引用类型的变量,深拷贝是对变量所指向实例的完全拷贝,而浅拷贝则只是对该变量引用地址进行拷贝。其中Object中的clone方法,只是进行对象的浅拷贝,如果需要对象的深拷贝,要重写clone方法。
/** |
浅拷贝示例:
public Student clone() {
try{
Student sc = (Student) super.clone();
return sc;
}catch(CloneNotSupportedException e){
System.err.println(e);
}
return null;
}
深拷贝示例:
public Student clone() {
try{
Student sc = (Student) super.clone();
BasicInfo cInfo = info.clone();
sc.setInfo(cInfo);
return sc;
}catch(CloneNotSupportedException e){
System.err.println(e);
}
return null;
}
总结
实现一个对象的深拷贝,除了重写Object中的protected clone()方法外,也可以通过java的序列化与反序列化机制实现深拷贝,但是在性能上来说,clone方法的性能要高于序列化与反序列化方式。