Java23种设计模式之创建型模式「原型模式」

2020-12-19 20:40

阅读:757

标签:父类   对象   imageview   write   this   rri   说明   tps   view   

原型模式

技术图片

/**
 * 原型模式
 * 

* 浅复制(浅克隆):将一个对象复制后,基本数据类型的变量都会重新创建,而引用类型,指向的还是原对象所指向的 * 深复制(深克隆):不管是基本数据类型还是引用类型,都会重新创建。简单来说:就是深复制进行了完全彻底的复制 *

* 注: * 实现 Cloneable 接口,并覆盖其clone方法,并且声明为 public * 浅复制和深复制建议不要混合使用,一个类中某些引用使用的浅复制,某些引用使用了深复制 * 这是一种非常差的设计,特别是在涉及到类的继承,父类有几个引用的情况就非常复杂 * 建议深复制和浅复制分开实现 *

* 说明: * 这里在一个对象类里面写了两个复制逻辑,只是为了方便查看和学习 * * @author Mr.Lim */ public class Prototype implements Cloneable, Serializable { private static final long serialVersionUID = -2911276289956526976L; /** * 姓名 */ public String name; /** * 年龄 */ public Integer age; /** * 学生信息对象 */ public Student student; /** * 浅复制 */ @Override public Prototype clone() { Prototype prototype = null; try { prototype = (Prototype) super.clone(); } catch (CloneNotSupportedException e) { e.printStackTrace(); } return prototype; } /** * 深复制 *

* 注: * 本对象和对象里面引用的对象都要实现 java.io.Serializable 接口 */ public Prototype deepClone() { try { // 写入当前对象的二进制流 ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); ObjectOutputStream oos = new ObjectOutputStream(byteArrayOutputStream); oos.writeObject(this); // 读取当前对象的二进制流 ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(byteArrayOutputStream.toByteArray()); ObjectInputStream ois = new ObjectInputStream(byteArrayInputStream); return (Prototype) ois.readObject(); } catch (IOException | ClassNotFoundException e) { e.printStackTrace(); } return null; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public Student getStudent() { return student; } public void setStudent(Student student) { this.student = student; } }

Java23种设计模式之创建型模式「原型模式」

标签:父类   对象   imageview   write   this   rri   说明   tps   view   

原文地址:https://www.cnblogs.com/Mr-Lim/p/13367586.html


评论


亲,登录后才可以留言!