设计模式.原型设计模式(Clone方法 浅拷贝 深拷贝)
Override protected User clone() throws CloneNotSupportedException { // return new User(this.getName(),address);//浅拷贝 return new User(this.getName(),(Address)address.clone());//深拷贝 }clone一个对象定义创建一个对象相当复杂或者对象中的值很多创建后需要重复复制。那么这时候就可以使用现成的对象Clone一个出来在根据具体差异进行修改即可。方式通过实现Clone方法(深拷贝和前拷贝之分)可以手动赋值也可以使用映射将原始对象 转换 为json字符串在把json字符串 转换为一个对象将原始对象 转换 为二进制字节流在把二进制字节流 转换为一个对象实现1. 实体实现Object.clone方法protected native java.lang.Object clone() throws java.lang.CloneNotSupportedException;2. 实现Serializable接口进行两次序列化就行public static void main(String[] args) throws Exception { User u new User(name1,new Address(address1)); User u2 u.clone(); /* * 浅拷贝 就是地址拷贝 * 深拷贝 就是 一直深入到8种集中数据类型 */ System.out.println(u2:u2.toString()); /* 写入当前对象的二进制流 */ ByteArrayOutputStream bos new ByteArrayOutputStream(); ObjectOutputStream oos new ObjectOutputStream(bos); oos.writeObject(u); /* 读出二进制流产生的新对象 */ ByteArrayInputStream bis new ByteArrayInputStream(bos.toByteArray()); ObjectInputStream ois new ObjectInputStream(bis); User u3 (User)ois.readObject(); System.out.println(u3:u3.toString()); u3.getAddress().setAddress(address3); System.out.println(u:u.toString()); } public class User implements Serializable{ private String name; private Address address; public User(String name, Address address) { super(); this.name name; this.address address; } public String getName() { return name; } public void setName(String name) { this.name name; } public Address getAddress() { return address; } public void setAddress(Address address) { this.address address; } Override protected User clone() throws CloneNotSupportedException { // return new User(this.getName(),address);//浅拷贝 return new User(this.getName(),(Address)address.clone());//深拷贝 } Override public String toString() { return User [name name , address (address!null?address.toString():null) ]; } }