原型模式如何创建深层复制throw clone()方法

时间:2014-08-17 07:27:55

标签: java design-patterns prototype-pattern

我知道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();
    }

}

1 个答案:

答案 0 :(得分:1)

好吧,我不认为原型模式总是深度复制(取决于你如何实现/覆盖clone()方法)。

<强> 1 即可。如果覆盖了它的类,它实际上是一个浅层副本     clone方法只调用上面例子中的super.clone()。

<强> 2 即可。如果重写的clone()方法遍历字段     我们正在克隆的实际对象并尝试创建一个新对象     这些对象的副本并将其存储在我们离开的对象中     只调用super.clone()然后它才能被称为深层复制。

除非创建任何实现自定义Prototype接口的类并且简单地调用super.clone(),否则它将执行浅复制,其中在父对象和克隆对象中HAS对任何外部对象的引用都将是指向同一个对象,因此是一个浅拷贝。

另请注意,在您提供的示例中,您需要使用您的接口Prototype来实现Cloneable标记接口。