克隆对象的性能(通过可克隆接口或复制构造函数)与在原型模式中创建新对象

Performance of Cloning (either by Cloneable Interface or Copy Constructor) a object vs Creating a new object in Prototype Pattern

最近在学习设计模式时,了解到原型模式在需要创建大量对象的场景中非常有用且性能高效。

原型模式还通过在原型模式中使用 Cloneable 接口或复制构造函数,最大限度地减少了过多对象创建的开销。

但是,我想知道克隆或复制对象如何比创建新对象更有效。 JVM 级别的解释会很棒。

这是使用原型模式的唯一原因吗?

原型模式不用于性能(尽管根据 Ioannis 的 link,它已被用作性能 hack)。它的用途是让您可以从(可能会更改的)原型创建新对象。

需要"cloning"的一些方法,所以你不必关心原型的状态。您只需调用 prototype.someMethodThatReturnsACopy() 即可使用该对象。您可以使用 clone() 或其他方式来创建该副本,如果您确实需要,甚至可以手动构建一个。

有趣的是,您最近了解到原型模式是高性能的,因为该设计模式已经过时了。 你可以看看这个Whosebug question,快10岁了

之前的答案是正确的,因为原型模式在 Java 中不是有用的性能工具。

GoF 书第 121 页指出,

Prototype is particularly useful with static languages like C++, where classes are not objects, and little or no type information is available at run-time. It's less important in languages like Smalltalk or Objective C that provide what amounts to a prototype (i.e., a class object) for creating instances of each class. This pattern is built into prototype-based languages like Self, in which all object creation happens by cloning a prototype.

一种更现代的基于原型的语言是 JavaScript。 prototype based vs. class based inheritance.

中讨论了一些优缺点