本文共 2518 字,大约阅读时间需要 8 分钟。
1. 实现Cloneable接口 2. 重写clone方法
应用场景: 1. Spring Bean 的创建:单例模式、原型模式 2. 与工厂模式一起使用,代替 new
代码中表现为cloneVideo的publishTime只是指向了原video的publishTime
package prototype.shallow;import java.util.Date;public class Video implements Cloneable { private String name; private Date publishTime; public Video(String name, Date publishTime) { this.name = name; this.publishTime = publishTime; } public Video() { } public String getName() { return name; } public void setName(String name) { this.name = name; } public Date getPublishTime() { return publishTime; } public void setPublishTime(Date publishTime) { this.publishTime = publishTime; } @Override protected Object clone() throws CloneNotSupportedException { return super.clone(); } @Override public String toString() { return "Video [name=" + name + ", publishTime=" + publishTime + "]"; }}
package prototype.shallow;import java.util.Date;public class Main { public static void main(String[] args) throws CloneNotSupportedException { Date date = new Date(); Video video = new Video("VideoName", date); Video cloneVideo = (Video)video.clone(); System.out.println(video); System.out.println(cloneVideo); date.setTime(1231241); System.out.println(video); System.out.println(cloneVideo); }}
package prototype.deep;import java.util.Date;public class Video implements Cloneable { private String name; private Date publishTime; public Video(String name, Date publishTime) { this.name = name; this.publishTime = publishTime; } public Video() { } public String getName() { return name; } public void setName(String name) { this.name = name; } public Date getPublishTime() { return publishTime; } public void setPublishTime(Date publishTime) { this.publishTime = publishTime; } @Override protected Object clone() throws CloneNotSupportedException { Object obj = super.clone(); Video v = (Video)obj; v.publishTime = (Date)this.publishTime.clone(); return obj; } @Override public String toString() { return "Video [name=" + name + ", publishTime=" + publishTime + "]"; }}
package prototype.deep;import java.util.Date;public class Main { public static void main(String[] args) throws CloneNotSupportedException { Date date = new Date(); Video video = new Video("VideoName", date); Video cloneVideo = (Video)video.clone(); System.out.println(video); System.out.println(cloneVideo); date.setTime(1231241); System.out.println(video); System.out.println(cloneVideo); }}
转载地址:http://wssl.baihongyu.com/