package com.djk.design.factory.clone;
public class ShallowCloen implements Cloneable
{
private String name;
private int age;
private Teacher teacher;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Teacher getTeacher() {
return teacher;
}
public void setTeacher(Teacher teacher) {
this.teacher = teacher;
}
@Override
public Object clone() throws CloneNotSupportedException
{
return super.clone();
}
@Override
public String toString()
{
return "ShallowCloen [age=" + age + ", name=" + name + ", teacher="
+ teacher + "]";
}
}
package com.djk.design.factory.clone;
public class Teacher
{
private String terchearName;
private int terchearAge;
public String getTerchearName() {
return terchearName;
}
public void setTerchearName(String terchearName) {
this.terchearName = terchearName;
}
public int getTerchearAge() {
return terchearAge;
}
public void setTerchearAge(int terchearAge) {
this.terchearAge = terchearAge;
}
@Override
public String toString()
{
return "Teacher [terchearAge=" + terchearAge + ", terchearName="
+ terchearName + "]";
}
}
package com.djk.design.factory.clone;
public class Client
{
public static void main(String[] args) throws CloneNotSupportedException
{
Teacher teacher = new Teacher();
teacher.setTerchearAge(32);
teacher.setTerchearName("djk");
ShallowCloen shallowCloen = new ShallowCloen();
shallowCloen.setAge(24);
shallowCloen.setName("test");
shallowCloen.setTeacher(teacher);
System.out.println(shallowCloen);
ShallowCloen cloneShallow = (ShallowCloen) shallowCloen.clone();
System.out.println(cloneShallow);
cloneShallow.setAge(40);
System.out.println(cloneShallow);
System.out.println(shallowCloen);
cloneShallow.getTeacher().setTerchearAge(45);
System.out.println(cloneShallow);
System.out.println(shallowCloen);
}
}
原型模式就是对对象的克隆,克隆分浅克隆和深克隆,上面介绍的是浅克隆,由上面的代码可以知道浅克隆对象的时候,当浅克隆对象里面有另一个对象的引用,则克隆出来的对象改变克隆对象里面的引用的时候会影响到原来的对象。所以当浅克隆对象里面有对另一个对象的引用的时候,克隆的是这个对象在java栈里面的值而没有克隆引用对象。