定义:是用于创建重复的对象,同时又能保证性能。
个人理解:Java的复制clone方法,但是要区分好浅克隆和深克隆。
UML图解:
优点:新建一个一模一样的对象直接用这个方法即可。
缺点:必须要实现Cloneable接口以及注意深克隆。
代码:
public class Test {
public static void main(String[] args) throws Exception {
Person p1 = new Person();
Person p2 = (Person)p1.clone();
System.out.println("p1.loc == p2.loc? " + (p1.loc == p2.loc));
p1.loc.street.reverse();
System.out.println(p2.loc.street);
}
}
class Person implements Cloneable {
int age = 8;
int score = 100;
Location loc = new Location(new StringBuilder("bj"), 22);
@Override
public Object clone() throws CloneNotSupportedException {
Person p = (Person)super.clone();
p.loc = (Location)loc.clone();
return p;
}
}
class Location implements Cloneable {
StringBuilder street;
int roomNo;
@Override
public String toString() {
return "Location{" +
"street='" + street + '\'' +
", roomNo=" + roomNo +
'}';
}
public Location(StringBuilder street, int roomNo) {
this.street = street;
this.roomNo = roomNo;
}
@Override
public Object clone() throws CloneNotSupportedException {
return super.clone();
}
}
总结:克隆时要考虑String是否需要进一步深克隆,还有对象中可能有其他的引用类,这个类也要考虑克隆的问题。