为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕尼黑5688855 2023-09-20 19:10:36
最近,在学习设计模式时,我了解到原型模式在需要创建大量对象的场景中非常有用且性能高效。原型模式还通过使用原型模式中的 Cloneable 接口或复制构造函数,最大限度地减少创建过多对象的开销。但是,我想知道克隆或复制对象如何比创建新对象更有效。如果有 JVM 级别的解释就太好了。这是使用原型模式的唯一原因吗?
查看完整描述

2 回答

?
绝地无双

TA贡献1946条经验 获得超4个赞

原型模式不用于性能(尽管根据 Ioannis 的链接,它已被用作性能黑客)。使用它可以从(可能会改变的)原型创建新对象。

需要某种“克隆”方法,这样您就不必关心原型的状态。您只需调用prototype.someMethodThatReturnsACopy()该对象就可以使用了。您可以使用clone()或其他某种方式来创建该副本,如果您确实需要,甚至可以手动构建一个副本。


查看完整回答
反对 回复 2023-09-20
?
蓝山帝景

TA贡献1843条经验 获得超7个赞

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

GoF 书第 121 页指出,

原型对于 C++ 等静态语言特别有用,其中类不是对象,并且在运行时很少或没有类型信息可用。在像 Smalltalk 或 Objective C 这样的语言中,它不太重要,因为它们提供了相当于原型(即类对象)来创建每个类的实例。这种模式内置于基于原型的语言(例如 Self)中,其中所有对象创建都是通过克隆原型来进行的。

JavaScript 是一种更现代的基于原型的语言。基于原型的继承与基于类的继承讨论了一些优缺点。


查看完整回答
反对 回复 2023-09-20
  • 2 回答
  • 0 关注
  • 86 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信