JAVA设计模式-原型模式

it2025-12-08  5

定义 以某对象为原型 复制出的新对象

package Yuanxing02; import java.util.Date; // 实现一个接口 重写一个方法 Cloneable // 原型 public class Vedio implements Cloneable { private String name; private Date createTime; @Override protected Object clone() throws CloneNotSupportedException { return super.clone();; } public Vedio() { } public Vedio(String name, Date createTime) { super(); 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 "Vedio [name=" + name + ", createTime=" + createTime + "]"; } }

Vedio.java

package Yuanxing02; import java.util.Date; // 实现一个接口 重写一个方法 Cloneable // 原型 public class Vedio implements Cloneable { private String name; private Date createTime; @Override protected Object clone() throws CloneNotSupportedException { Object obj = super.clone(); Vedio v = (Vedio)obj; // 将对象的属性也进行克隆(深克隆) v.createTime = (Date)this.createTime.clone(); return obj; } public Vedio() { } public Vedio(String name, Date createTime) { super(); 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 "Vedio [name=" + name + ", createTime=" + createTime + "]"; } }

问题

以上代码会出现 两个vedio 同时引用一个date 地址 我改了vedio1的时间后 vedio2的时间也会改变 由于是浅拷贝(拷贝的是引用的地址) 一下进行修改

package Yuanxing02; import java.util.Date; // 实现一个接口 重写一个方法 Cloneable // 原型 public class Vedio implements Cloneable { private String name; private Date createTime; @Override protected Object clone() throws CloneNotSupportedException { Object obj = super.clone(); Vedio v = (Vedio)obj; // 将对象的属性也进行克隆(深克隆) v.createTime = (Date)this.createTime.clone(); return obj; } public Vedio() { } public Vedio(String name, Date createTime) { super(); 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 "Vedio [name=" + name + ", createTime=" + createTime + "]"; } }
最新回复(0)