package design.creator.prototype;
import java.util.ArrayList;
import java.util.List;/**
* 深度拷贝:*/
classDog implements Cloneable {intage;
String name;
List list;
Pojo pojo;publicDog(String tempName) {
name=tempName;
list= new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);
pojo= newPojo();
pojo.setV1(111);
pojo.setV2("aa");
}public voidsetName(String name) {this.name =name;
}public intgetAge() {returnage;
}public void setAge(intage) {this.age =age;
}publicString getName() {returnname;
}publicList getList() {returnlist;
}public voidsetList(List list) {this.list =list;
}
@OverridepublicString toString() {return "Dog [age=" + age + ", name=" + name +
", list=" + list + "]" + ", pojo=" + pojo + "]";
}publicPojo getPojo() {returnpojo;
}public voidsetPojo(Pojo pojo) {
pojo=pojo;
}publicDog clone() {
Dog myDog= null;try{
myDog=(Dog) super.clone();
myDog.list=(List) ((ArrayList)myDog.list).clone();//想要调用其clone方法,必须1 implements Cloneable 2 对其重写clone
myDog.pojo =(Pojo) myDog.pojo.clone();
}catch(CloneNotSupportedException e) {
e.printStackTrace();
}returnmyDog;
}
}classPojo implements Cloneable{intv1;
String v2;public intgetV1() {returnv1;
}public void setV1(intv1) {this.v1 =v1;
}publicString getV2() {returnv2;
}public voidsetV2(String v2) {this.v2 =v2;
}
@OverridepublicString toString() {return "Pojo [v1=" + v1 + ", v2=" + v2 + "]";
}
@OverrideprotectedObject clone() throws CloneNotSupportedException {returnsuper.clone();
}
}public classPrototypeTest {public static voidmain(String[] args) {
Dog myDog= new Dog("热狗");
myDog.setAge(12);
Dog newDog=(Dog) myDog.clone();
System.out.println("myDog" +myDog );
System.out.println("newDog" +newDog );//myDog.ShowName();//newDog.ShowName();
myDog.setName("aaaaa");
myDog.setAge(33);
myDog.getList().clear();
myDog.getPojo().setV1(222);
myDog.getPojo().setV2("bbb");//myDog.ShowName();//newDog.ShowName();
System.out.println("myDog" +myDog );
System.out.println("newDog" +newDog );
}
}