原型模式
说明
原型模式(Prototype Pattern)属于创建型模式,是指根据一个原型对象克隆出一个一摸一样的对象,且不需要调用其构造函数。
浅克隆
实现Cloneable接口,在克隆方法中调用super.clone()方法即可。
浅克隆对于对象中的基本数据类型会创建新的值,但是对于引用类型则只会将其引用地址赋值给新对象。
@Data
public class ConcretePrototype implements Cloneable {
private int age; // 年龄
private String name; // 姓名
private List<String> hobbies; // 爱好
@Override
public String toString() {
return "ConcretePrototype{" +
"age=" + age +
", name='" + name + '\'' +
", hobbies=" + hobbies +
'}';
}
@Override
public Object clone() throws CloneNotSupportedException {
return super.clone();
}
}
深克隆
实现Serializeble接口,使用二进制流进行复制
public class Sheep implements Serializable {
private int age; // 年龄
private String name; // 姓名
private List hobbies; // 爱好
public Sheep deepClone() throws IOException, ClassNotFoundException {
/* 写入当前对象的二进制流 */
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(bos);
oos.writeObject(this);
/* 读出二进制流产生的新对象 */
ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray());
ObjectInputStream ois = new ObjectInputStream(bis);
return (Sheep) ois.readObject();
}
}