本文共 6718 字,大约阅读时间需要 22 分钟。
public interface IPrototype{ T clone();}
public class ConcretePrototype implements IPrototype{ private int age; private String name; public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public ConcretePrototype clone() { ConcretePrototype concretePrototype = new ConcretePrototype(); concretePrototype.setAge(this.age); concretePrototype.setName(this.name); return concretePrototype; } @Override public String toString() { return "ConcretePrototype{" + "age=" + age + ", name='" + name + '\'' + '}'; }}
public class Client { public static void main(String[] args) { ConcretePrototype prototype = new ConcretePrototype(); prototype.setAge(18); prototype.setName("Jack"); System.out.println(prototype); //拷贝原型对象 ConcretePrototype cloneType = prototype.clone(); System.out.println(cloneType); }}
public class ConcretePrototype implements Cloneable { private int age; private String name; private Listhobbies; public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public List getHobbies() { return hobbies; } public void setHobbies(List hobbies) { this.hobbies = hobbies; } @Override public ConcretePrototype clone() { try { return (ConcretePrototype)super.clone(); } catch (CloneNotSupportedException e) { e.printStackTrace(); } return null; } @Override public String toString() { return "ConcretePrototype{" + "age=" + age + ", name='" + name + '\'' + ", hobbies=" + hobbies + '}'; }}
public class Client { public static void main(String[] args) { ConcretePrototype prototype = new ConcretePrototype(); prototype.setAge(18); prototype.setName("Jack"); Listhobbies = new ArrayList<>(); hobbies.add("打球"); hobbies.add("游戏"); prototype.setHobbies(hobbies); System.out.println(prototype); //拷贝原型对象 ConcretePrototype cloneType = prototype.clone(); cloneType.getHobbies().add("学习"); System.out.println("拷贝前对象: " + prototype); System.out.println("拷贝后对象: " + cloneType); System.out.println(prototype == cloneType); System.out.println("原型对象的爱好: " + prototype.getHobbies()); System.out.println("拷贝对象的爱好: " + cloneType.getHobbies()); System.out.println(prototype.getHobbies() == cloneType.getHobbies()); }}
public class ConcretePrototype implements Cloneable ,Serializable{ private int age; private String name; private Listhobbies; public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public List getHobbies() { return hobbies; } public void setHobbies(List hobbies) { this.hobbies = hobbies; } private static ConcretePrototype instance = new ConcretePrototype(); private ConcretePrototype(){ } public static ConcretePrototype getInstance(){ return instance; } @Override public ConcretePrototype clone() { try { return (ConcretePrototype)super.clone(); } catch (CloneNotSupportedException e) { e.printStackTrace(); } return null; } public ConcretePrototype deepClone(){ ConcretePrototype concretePrototype = null; try { ByteArrayOutputStream bos = new ByteArrayOutputStream(); ObjectOutputStream oos = new ObjectOutputStream(bos); oos.writeObject(this); ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray()); ObjectInputStream ois = new ObjectInputStream(bis); concretePrototype = (ConcretePrototype)ois.readObject(); ois.close(); bis.close(); oos.close(); bos.close(); } catch (Exception e) { e.printStackTrace(); } return concretePrototype; } public ConcretePrototype deepCloneObject(){ ConcretePrototype concretePrototype = null; try { ConcretePrototype clone = (ConcretePrototype)super.clone(); clone.hobbies = (List)((ArrayList)clone.hobbies).clone(); concretePrototype = clone; } catch (Exception e) { e.printStackTrace(); } return concretePrototype; } @Override public String toString() { return "ConcretePrototype{" + "age=" + age + ", name='" + name + '\'' + ", hobbies=" + hobbies + '}'; }}
public class Client { public static void main(String[] args) { ConcretePrototype prototype = ConcretePrototype.getInstance(); prototype.setAge(18); prototype.setName("Jack"); Listhobbies = new ArrayList<>(); hobbies.add("打球"); hobbies.add("游戏"); prototype.setHobbies(hobbies); System.out.println(prototype); //拷贝原型对象 ConcretePrototype cloneType = prototype.deepCloneObject(); cloneType.getHobbies().add("学习"); System.out.println("拷贝前对象: " + prototype); System.out.println("拷贝后对象: " + cloneType); System.out.println(prototype == cloneType); System.out.println("原型对象的爱好: " + prototype.getHobbies()); System.out.println("拷贝对象的爱好: " + cloneType.getHobbies()); System.out.println(prototype.getHobbies() == cloneType.getHobbies()); }}
转载地址:http://bkjrn.baihongyu.com/