java原型(prototype)设计模式对象创建

标签 java design-patterns prototype-pattern

我正在研究原型(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/

相关文章:

java - 如何在方法中为变量设置值并在主方法中打印出来?

java解析html中的文本而不包含链接

java - 当 OnFocusChangeListener 应用于包装的 EditText 时,TextInputLayout 不设置动画

python - 有人在 Python/其他语言中使用 meta-meta-classes/meta-meta-meta-classes 吗?

html - 在 TextMate 中标记时添加常用代码块的最佳方法是什么?

java - 删除目录java中的某些文件夹

c++ - 嵌入式 C++ : dynamic typing without dynamic allocation?

c# - 原型(prototype)模式,为什么需要接口(interface)?

c# - 原型(prototype)模式是否符合依赖注入(inject)?

design-patterns - 原型(prototype)与。享元设计模式