用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象,简单理解就是拷贝
在Java中实现原型模式十分简单,只需要实现Cloneable接口并重写clone()方法就可以了
看到这里一切都很正常,但是,当我对Apple类增加引用类型
public class Apple implements Cloneable{
private String name ;
private String color ;
private ArrayList<Integer> list ;
public ArrayList getList() {
return list;
}
public void setList(ArrayList<Integer> list) {
this.list = list;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
public Apple() {
System.out.println("正在构造苹果,无参");
}
public Apple(String name, String color) {
System.out.println("正在构造苹果,有参");
this.name = name;
this.color = color;
}
@Override
protected Object clone() throws CloneNotSupportedException {
return super.clone();
}
@Override
public String toString() {
return "Apple{" +
"name='" + name + '\'' +
", color='" + color + '\'' +
", list=" + list +
'}';
}
}
List的值被改变了,由此引出一个结论‘浅拷贝’ 1. 对于引用类型,只拷贝其引用 2. 不能完全做到保护性拷贝 现在再次对clone() 方法进行改造,引出‘深拷贝’
由此就达到了深拷贝的效果