在OOP中,原型设计模式最重要的部分之一就是我们不会从头开始创建新对象,我们只是使用clone()
函数从现有对象中克隆它们。
clone()
函数是深拷贝还是浅拷贝?
如果它是一个深层副本,那么我将理解所有内容,但是如果它是浅层副本,那么如果两个不同的对象(一个使用原型模式从另一个对象创建的对象)监视相同的状态对象,那将是一团糟,这意味着这些对象不是完全没有区别(它们被链接在一起,因为它们共享相同的状态对象)。
有人可以向我澄清这种情况吗?
答案 0 :(得分:1)
Java Object
clone
方法实现了Prototype
设计模式。使用prototypical
实例创建一个新实例。但是clone
只是给您一个浅表副本,而不是深表副本。因此,这是一个危险的副本。如果需要深层副本,则必须明确实现它。 clone
复制原始值,但不复制对象引用。因此,原始对象和克隆对象都将指向相同的对象引用,并且如果一个对象引用被修改,则将其应用于另一个对象引用,从而使对象处于危险状态。