原型模式就是相当于克隆复制:而原型模式里分为浅克隆和深克隆,浅克隆把地址值也克隆了,他们都指向同一个地址值。这样的话原来的对象属性修改后被克隆的属性也会跟着修改这不是想要的效果。而深克隆的话就是把对象里的属性也调用克隆的方法,这样的话对象里面的属性修改后克隆出来的对象不会改变。
浅克隆:首先创建一个对象里面有两个属性,提供get、set方法,有参构造和无参构造和tostroing方法再实现一个接口 Cloneable 重写clone()方法
public class Video implements Cloneable{//克隆别人的视频
private String name;
private Date createTime;
@Override
protected Object clone() throws CloneNotSupportedException {
return super.clone();
}
public Video(String name, Date createTime) {
this.name = name;
this.createTime = createTime;
}
public Video() {
}
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 +
'}';
}
}
public static void main(String[] args) throws CloneNotSupportedException {
//原型对象 v1
Date date = new Date();
Video v1 = new Video("黄巨强学java", date);
System.out.println("v1=>"+v1);
System.out.println("v1=hashCode>"+v1.hashCode());
//v1克隆v2出来
Video v2 = (Video) v1.clone();
System.out.println("v2=>"+v1);
System.out.println("v2=hashCode>"+v1.hashCode());
v2.setName("黄巨强学模式");
System.out.println(v2);
//浅克隆,地址值都是引用同一个
}
深克隆:在原有的clone()方法上把他的属性也调用克隆方法
@Override
protected Object clone() throws CloneNotSupportedException {
Object obj = super.clone();
Video v = (Video) obj;
v.createTime = (Date) this.createTime.clone();
//实现深克隆
return obj;
}
public static void main(String[] args) throws CloneNotSupportedException {
//原型对象 v1
Date date = new Date();
Video v1 = new Video("黄巨强学java", date);
//v1克隆v2出来
Video v2 = (Video) v1.clone();
System.out.println("v1=>"+v1);
System.out.println("v1=>"+v2);
System.out.println("*****************************");
date.setTime(123456);
System.out.println("v1=>"+v1);
System.out.println("v1=>"+v2);
}
Java原型模式详解:浅克隆与深克隆的区别
本文介绍了Java中的原型模式,包括浅克隆和深克隆的概念。通过示例代码展示了如何实现浅克隆和深克隆,并通过比较两者在对象属性修改后的效果,强调了深克隆在防止原始对象被修改时的重要性。
1229

被折叠的 条评论
为什么被折叠?



