Java23种设计模式之创建型模式「原型模式」
Posted Mr.Lim
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java23种设计模式之创建型模式「原型模式」相关的知识,希望对你有一定的参考价值。
原型模式
/**
* 原型模式
* <p>
* 浅复制(浅克隆):将一个对象复制后,基本数据类型的变量都会重新创建,而引用类型,指向的还是原对象所指向的
* 深复制(深克隆):不管是基本数据类型还是引用类型,都会重新创建。简单来说:就是深复制进行了完全彻底的复制
* <p>
* 注:
* 实现 Cloneable 接口,并覆盖其clone方法,并且声明为 public
* 浅复制和深复制建议不要混合使用,一个类中某些引用使用的浅复制,某些引用使用了深复制
* 这是一种非常差的设计,特别是在涉及到类的继承,父类有几个引用的情况就非常复杂
* 建议深复制和浅复制分开实现
* <p>
* 说明:
* 这里在一个对象类里面写了两个复制逻辑,只是为了方便查看和学习
*
* @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;
}
/**
* 深复制
* <p>
* 注:
* 本对象和对象里面引用的对象都要实现 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种设计模式之创建型模式「原型模式」的主要内容,如果未能解决你的问题,请参考以下文章