我正在研究原型(prototype)设计模式并有一些问题。
我了解原型(prototype)设计模式用于创建在内存或资源方面成本高昂的对象。在这种情况下,我们使用已经可用的对象的克隆。
那么创建一个new
对象和clone()
有什么区别呢?对象存储在内存中的什么位置?
最佳答案
Java clone()
方法只是创建一个新对象并将成员变量值复制到其中。通常,它不比创建新对象更昂贵或更便宜。唯一一次 clone()
可能比使用 new
创建对象更便宜的情况是对象的构造函数做了一些昂贵的事情:例如,如果构造函数采用参数并将它们用作数据库查询的一部分?在这种情况下,使用 clone()
会更便宜,因为不会发生昂贵的查询操作。
虽然还有其他使用此设计模式的原因:大多数情况下,对象在使用前需要进行复杂的设置,而这在构造函数中无法方便地完成。假设一个对象有 20 个属性需要设置。如果你用构造函数参数设置它们,那个构造函数会非常丑陋——想象一个有 20 个参数的构造函数!相反,您可以构造一个可能没有参数的对象,使用 mutator 方法设置 20 个值,然后 clone()
该对象以在需要时制作现成的副本。 clone()
根本不需要任何参数,所以它显然不那么难看。如果您需要此对象的多个不同版本的多个副本,那么原型(prototype)模式就变得很有吸引力。
关于java原型(prototype)设计模式对象创建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11706513/