设计模式: 原型模式实际上就是实现 Cloneable 接口,重写 clone()方法。
浅拷贝和深拷贝:
浅拷贝:Object 类提供的方法 clone 只是拷贝本对象,其对象内部的数组、引用对象等都不拷贝,还是指向原生对象的内部元素地址,这种拷贝就叫做浅拷贝,其他的原始类型比如 int、long、char、string(当做是原始类型)等都会被拷贝。
注意: 使用原型模式时,引用的成员变量必须满足两个条件才不会被拷贝:一是类的成员变量,而不是方法内变量;二是必须是一个可变的引用对象,而不是一个原始类型或不可变对象。
深拷贝:对私有的类变量进行独立的拷贝
public class Phone implements Cloneable {
private String name;
private String type;
private Float price;
@Override
public Phone clone() throws CloneNotSupportedException {
Phone phone = (Phone) super.clone();
return phone;
}
@Override
public String toString() {
return "Phone{" +
"name='" + name + '\'' +
", type='" + type + '\'' +
", price=" + price +
'}';
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public Float getPrice() {
return price;
}
public void setPrice(Float price) {
this.price = price;
}
}
主函数
int num = 5;
Phone phone = new Phone();
while (num > 0){
Phone phone1 = phone.clone();
float price = 10000;
phone1.setName("苹果");
phone1.setPrice(price+num);
phone1.setType("苹果"+num);
System.out.println(phone1.toString());
num --;
}