原型模式(Prototype Pattern)是一种创建型设计模式,它允许通过复制(或克隆)一个现有对象来创建一个新对象,而无需重新实例化它。这种模式在Java中可以通过实现Cloneable
接口和重写clone()
方法来实现深拷贝(Deep Copy)和浅拷贝(Shallow Copy)。
浅拷贝(Shallow Copy):
Cloneable
接口并重写clone()
方法来实现浅拷贝。但需要注意的是,clone()
方法默认执行的是浅拷贝,需要开发者手动实现深拷贝逻辑。public class ShallowCopyExample implements Cloneable {
private int[] data;
public ShallowCopyExample(int[] data) {
this.data = data;
}
@Override
protected Object clone() throws CloneNotSupportedException {
return super.clone();
}
}
在这个例子中,ShallowCopyExample
类实现了Cloneable
接口并重写了clone()
方法。但是,由于data
字段是一个数组,它仍然指向同一个内存地址,因此执行的是浅拷贝。
2. 深拷贝(Deep Copy):
* 深拷贝创建一个新对象,并递归地拷贝原始对象中的所有引用类型字段。这意味着新对象和原始对象的引用类型字段将指向不同的内存地址。
* 在Java中,实现深拷贝通常需要自定义拷贝逻辑,而不是简单地重写`clone()`方法。可以通过序列化和反序列化的方式来实现深拷贝,因为序列化会创建对象的深度副本。
* 例如:
public class DeepCopyExample implements Serializable {
private int[] data;
public DeepCopyExample(int[] data) {
this.data = data;
}
public DeepCopyExample deepCopy() {
try {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(baos);
oos.writeObject(this);
ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
ObjectInputStream ois = new ObjectInputStream(bais);
return (DeepCopyExample) ois.readObject();
} catch (IOException | ClassNotFoundException e) {
throw new RuntimeException("Deep copy failed", e);
}
}
}
在这个例子中,DeepCopyExample
类实现了Serializable
接口,并重写了一个deepCopy()
方法。这个方法使用序列化和反序列化的技术来创建对象的深度副本。
总结:
Cloneable
接口并重写clone()
方法来实现浅拷贝;通过序列化和反序列化的方式来实现深拷贝。免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。