Java23种设计模式之创建型模式「原型模式」
2020-12-19 20:40
标签:父类 对象 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原型模式
/**
* 原型模式
*
文章标题:Java23种设计模式之创建型模式「原型模式」
文章链接:http://soscw.com/index.php/essay/37268.html