我知道clone()
方法创建一个浅层副本和原型模式创建一个深层副本,但我不知道原型如何通过仍然使用clone()
方法来完成它。创建新对象克隆的核心要素是什么。
public interface Prototype {
public abstract Object clone ( );
}
public class ConcretePrototype implements Prototype {
public Object clone() {
return super.clone();
}
}
public class Client {
public static void main( String arg[] )
{
ConcretePrototype obj1= new ConcretePrototype ();
ConcretePrototype obj2 = ConcretePrototype)obj1.clone();
}
}
答案 0 :(得分:1)
好吧,我不认为原型模式总是深度复制(取决于你如何实现/覆盖clone()方法)。
<强> 1 即可。如果覆盖了它的类,它实际上是一个浅层副本 clone方法只调用上面例子中的super.clone()。
<强> 2 即可。如果重写的clone()方法遍历字段 我们正在克隆的实际对象并尝试创建一个新对象 这些对象的副本并将其存储在我们离开的对象中 只调用super.clone()然后它才能被称为深层复制。
除非创建任何实现自定义Prototype接口的类并且简单地调用super.clone(),否则它将执行浅复制,其中在父对象和克隆对象中HAS对任何外部对象的引用都将是指向同一个对象,因此是一个浅拷贝。
另请注意,在您提供的示例中,您需要使用您的接口Prototype来实现Cloneable标记接口。