最近,在学习设计模式时,我了解到,在需要大量创建对象的场景中,原型模式非常有用,而且性能非常高效。
Prototype模式还通过在原型模式中使用可复制的接口或复制构造函数来最小化太多对象创建的开销。
但是,我想知道如何克隆或复制对象比创建一个新对象更有效。JVM级别的解释将是很棒的。
这是使用原型图案的唯一原因吗?
发布于 2019-10-03 23:27:52
原型模式不用于性能(尽管根据Ioannis的链接,它已被用作性能攻击)。这样您就可以从一个(可能正在改变的)原型中创建新的对象。
一些“克隆”的方法是必要的,所以你不必关心原型的状态。您只需调用prototype.someMethodThatReturnsACopy()
,对象就可以使用了。您可以使用clone()
或其他方法创建该副本,如果您真的需要的话,甚至可以手动构建一个副本。
发布于 2019-10-03 23:28:09
有趣的是,您最近了解到原型模式是性能良好的,因为该设计模式已经过时。您可以检查这个stackoverflow question,它已经有将近10年的历史了
发布于 2019-10-05 12:35:40
前面的答案是正确的,因为原型模式在Java中不是一个有用的性能工具。
GoF的书在第121页上写道,
原型在静态语言(如C++ )中特别有用,其中类不是对象,在运行时很少或根本没有类型信息可用。在Smalltalk或object等语言中,为创建每个类的实例提供相当于一个原型(即类对象)的内容并不那么重要。这种模式被构建在基于原型的语言中,比如Self,在这种语言中,所有的对象创建都是通过克隆一个原型来实现的。
一种更现代的原型语言是JavaScript。在prototype based vs. class based inheritance中讨论了一些利弊。
https://stackoverflow.com/questions/58231681
复制相似问题