public class PrototypeDesignPattern {
public static void main(String[] args) {
Attachment attachment = new Attachment("日报", "test");
DailyTemplate dailyTemplate = new DailyTemplate("张三", "2021-08-06", "李四", attachment);
DailyTemplate dailyTemplate1 = dailyTemplate.clone();
System.out.println("日期:"+dailyTemplate1.getDate());
System.out.println("发送人:"+dailyTemplate1.getSender());
System.out.println("接收人:"+dailyTemplate1.getReceiver());
System.out.println(dailyTemplate.getAttachment() == dailyTemplate1.getAttachment());
DailyTemplate dailyTemplate2 = dailyTemplate.deepClone();
System.out.println("日期:"+dailyTemplate2.getDate());
System.out.println("发送人:"+dailyTemplate2.getSender());
System.out.println("接收人:"+dailyTemplate2.getReceiver());
System.out.println(dailyTemplate.getAttachment() == dailyTemplate2.getAttachment());
}
}
class DailyTemplate implements Cloneable, Serializable {
private String sender;
private String date;
private String receiver;
private Attachment attachment;
public DailyTemplate(String sender, String date, String receiver, Attachment attachment) {
this.sender = sender;
this.date = date;
this.receiver = receiver;
this.attachment = attachment;
}
@Override
public DailyTemplate clone() {
try {
return (DailyTemplate) super.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
return null;
}
public DailyTemplate deepClone() {
try (
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(bos)
) {
oos.writeObject(this);
try (
ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray());
ObjectInputStream ois = new ObjectInputStream(bis)
) {
return (DailyTemplate) ois.readObject();
}
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
return null;
}
public Attachment getAttachment() {
return attachment;
}
public void setAttachment(Attachment attachment) {
this.attachment = attachment;
}
public String getSender() {
return sender;
}
public void setSender(String sender) {
this.sender = sender;
}
public String getDate() {
return date;
}
public void setDate(String date) {
this.date = date;
}
public String getReceiver() {
return receiver;
}
public void setReceiver(String receiver) {
this.receiver = receiver;
}
}
class Attachment implements Serializable {
private String name;
private String content;
public Attachment(String name, String content) {
this.name = name;
this.content = content;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
}