创建模式之原型模式浅克隆

来源:互联网 发布:vb.net web开发 编辑:程序博客网 时间:2024/06/05 12:03

 

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;}@Overridepublic Object clone() throws CloneNotSupportedException {return super.clone();}@Overridepublic 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;}@Overridepublic 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栈里面的值而没有克隆引用对象。

0 0
原创粉丝点击