原型模式, 狂神老师讲的很简单, 就是重写clone, 在C++中可能是重写拷贝构造函数.
TIPS: 对于date来说, 如果不重新clone 的话就会是浅拷贝. 浅拷贝, 本质上是两个指针指向一个对象.
package prototype;
import java.util.Date;
/**
* Created by lee on 2021/5/27.
*/
public class Video implements Cloneable {
private String name;
private Date createTime;
@Override
protected Object clone() throws CloneNotSupportedException {
Object obj = super.clone();
Video v = (Video) obj;
v.createTime = (Date)this.createTime.clone();
return super.clone();
}
public Video(String name, Date createTime) {
this.name = name;
this.createTime = createTime;
}
public Video() {
}
@Override
public String toString() {
return "Video{" +
"name=‘" + name + ‘\‘‘ +
", createTime=" + createTime +
‘}‘;
}
public void setName(String name) {
this.name = name;
}
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
}
package prototype;
import java.util.Date;
/**
* Created by lee on 2021/5/27.
*/
public class Bilibili {
public static void main(String[] args) throws CloneNotSupportedException {
Date date = new Date();
Video v1 = new Video("name", date);
System.out.println("v1=>"+v1);
System.out.println("v1=>hash:" + v1.hashCode());
Video v2 = (Video) v1.clone();
System.out.println("v2=>"+v2);
System.out.println("v2=>hash:" + v2.hashCode());
}
}
原文:https://www.cnblogs.com/eat-too-much/p/14819776.html