今天无聊,看到prototype模式,里面实现就是使用clone()方法实现,于是赶紧记录一下。clone的使用类似与c++中"="赋值运算符重载,会出现"浅复制"和"深复制"的概念。
clone()方法
class A implements Cloneable{ //must implements Cloneable interface
public Object clone(){ //overload & use public to declare
CloneClass o = null;
try{
o = (A)super.clone(); //invoke super.clone()
}catch(CloneNotSupportedException e){
e.printStackTrace();
}
return o;
}
在java中解决浅复制问题方法如下:
1.假如现在对象B1(class is B)要被复制为对象B2,并且对象B1中包含了一个对象引用A1(class is A),那么类B需要实现clone(),同时类A也需要实现clone(),然后在类B中,使用B.A = (A)A.clone();即对B中每一个引用也使用clone进行复制。
2.类StringBuffer为final类型,并且没有实现clone()方法,所以不能进行上面方法实现深度复制,一种可行的方法是先判断该引用是不是StringBuffer,如果是,使用B.strBuff = new StringBuffer(strBuff.toString());
3.类String虽不是简单数据类型,但却可以自动实现深度复制,假象,挺好的。