设计模式——原型模式
任意一个类通过克隆的方法去得出另一类,原始类叫做原型
1、任意创建一个类,让这个类去实现一个接口Cloneable,重写一个方法clone(),此时没有修改clone里面,也就是浅拷贝,不会克隆属性
/**
* 实现一个接口 Cloneable
* 重写一个方法 clone()
*/
public class Video implements Cloneable{
//设置两个属性
private String name;
private Date createTime;
//实现里面的克隆方法
@Override
protected Object clone() throws CloneNotSupportedException {
return super.clone();
}
public Video(){
}
public Video(String name, Date createTime) {
this.name = name;
this.createTime = createTime;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Date getCreateTime() {
return createTime;
}
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
@Override
public String toString() {
return "Video{" +
"name='" + name + '\'' +
", createTime=" + createTime +
'}';
}
}
2、深拷贝,修改clone里面的方法内容,进行属性的拷贝
/**
* 实现一个接口 Cloneable
* 重写一个方法 clone()
*/
public class Video implements Cloneable{
//设置两个属性
private String name;
private Date createTime;
//实现里面的克隆方法
@Override
protected Object clone() throws CloneNotSupportedException {
Object obj = super.clone();
Video video = (Video)obj;
//将这个对象的属性也克隆
video.createTIme = this.createTime.clone();
return video;
}
public Video(){
}
public Video(String name, Date createTime) {
this.name = name;
this.createTime = createTime;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Date getCreateTime() {
return createTime;
}
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
@Override
public String toString() {
return "Video{" +
"name='" + name + '\'' +
", createTime=" + createTime +
'}';
}
}