prototype模式的目标是通过降低创建成本来克隆对象。下面是一个示例:
class Complex {
int[] nums = {1,2,3,4,5};
public Complex clone() {
return new Complex();//this line create a new object, so is it violate the objective of prototype ?//
}
}
class Test2 {
Complex c1 = new Complex();
Complex makeCopy() {
return (Complex)c1.clone();// Is it actually create a new object ? based on the clone method in Complex class? //
}
public static void main(String[] args) {
Test2 tp = new Test2();
Complex c2 = tp.makeCopy();
}
}我想这是为深度复制准备的。那么,有人能帮我解决这个问题吗?
发布于 2010-08-21 01:00:21
首先,要使其正常工作,您的复杂类需要实现Cloneable标记接口,以向Object.clone()方法表明,该方法为该类的实例创建字段对字段的副本是合法的。然后,您需要覆盖Object.clone()方法来指定复制行为:
public Complex clone(){
Complex clone = (Complex)super.clone();
clone.nums = this.nums;
return clone;
}发布于 2010-08-21 01:31:47
我不认为给出的例子是按照Prototype模式实现的。
我看到的错误是:
使用重写的克隆方法中的“implemented.
理解Prototype模式的一些链接:
http://www.javabeat.net/tips/34-using-the-prototype-pattern-to-clone-objects.html
http://www.allapplabs.com/java_design_patterns/prototype_pattern.htm
发布于 2010-08-21 01:32:35
克隆方法的java实现不会调用类构造函数。它会将当前实例占用的内存复制到内存中的另一个位置。
这样才能真正降低创建新对象的成本。
https://stackoverflow.com/questions/3533020
复制相似问题