原型模式,将白了就是对象的复制,java 中有已经提供了接口 Cloneable 。当然还有另外一种通过序列化的形式实现
public class WorkExperience implements Cloneable,Serializable{
private String workDate;
private String company;
public WorkExperience(String workDate, String company) {
super();
this.workDate = workDate;
this.company = company;
}
@Override
public Object clone() throws CloneNotSupportedException{
Object object = super.clone();
return object;
}
}
public class Resume implements Cloneable,Serializable{
private String name;
private String sex;
private String age;
private WorkExperience work;
@Override
public Object clone() throws CloneNotSupportedException{
Resume resume = (Resume) super.clone();
resume.setWork((WorkExperience) resume.getWork().clone());
return resume;
}
public Object deepCopy() throws Exception {
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(bos);
oos.writeObject(this);
ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray());
ObjectInputStream ois = new ObjectInputStream(bis);
return ois.readObject();
}
public Resume(String name, String sex, String age, WorkExperience work) {
super();
this.name = name;
this.sex = sex;
this.age = age;
this.work = work;
}
public WorkExperience getWork() {
return work;
}
public void setWork(WorkExperience work) {
this.work = work;
}
}
public class DemoEnter {
public static void main(String[] args) throws Exception {
WorkExperience work = new WorkExperience("2019","广州");
Resume resume = new Resume("张三","男","21",work);
System.out.println(resume);
// 第一种,通过 Cloneable 的方式
Resume resume2 = (Resume) resume.clone();
System.out.println(resume2);
System.out.println(resume);
// 第二种,通过序列化的方式
Resume resume3 = (Resume) resume.deepCopy();
System.out.println(resume3);
System.out.println(resume);
}
}