1.定义
用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。
2.UML
3.代码
public class PrototypeClass implements Cloneable {
public ArrayList<String> mList = new ArrayList<String>();
public PrototypeClass() {
System.out.println("clone对象不会执行构造函数");
}
@Override
protected PrototypeClass clone() {
PrototypeClass obj = null;
try {
obj = (PrototypeClass) super.clone();
obj.mList = (ArrayList<String>) mList.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
return obj;
}
}
public class Client {
public static void main(String[] args) {
PrototypeClass prototypeObject = new PrototypeClass();
prototypeObject.mList.add("张三");
PrototypeClass newPrototypeObject = prototypeObject.clone();
newPrototypeObject.mList.add("李四");
}
}
4.注意事项
clone方法是直接拷贝内存二进制流,比new性能好很多
1.clone对象的构造函数不会执行;
2.浅拷贝:只拷贝本对象,对象的成员变量引用、数组还是指向原对象的内存地址
3.深拷贝:重写clone方法,clone成员变量引用