我正在通过Java设计模式,并得到了一些怀疑/问题原型设计模式。 首先让我说出我的理解。原型设计模式用于创建对象 在内存或资源方面代价很高。所以在这种情况下,我们使用已经可用的那个对象的克隆。 那么创建新对象和clone()之间有什么区别?对象在内存中存储在哪里?java原型设计模式对象创建
7
A
回答
3
原型设计模式节省了两种成本 - 节省时间和节省空间。
节省时间在创建对象时需要对辅助信息进行高成本访问 - 例如从文件,数据库或通过网络请求配置数据。例如,如果要从存储在Web服务器上的模板中构建大量页面,则只需读取一次模板并将其克隆以获取每个新页面的起点便宜,而不是分别查询Web服务器每页。内存节省来自于重用不可变对象:如果原始文件包含大量字符串,则创建新实例需要创建全新的不可变字符串,或手动处理字符串实习。通过让克隆共享模板的不可变部分,使用原型模式可以避免这个问题。
4
Java clone()
方法只是创建一个新对象并将成员变量值复制到该对象中。一般来说,它不会比创建新对象更便宜。唯一的时候clone()
可能比用new
创建一个对象便宜的时候,对象的构造函数会花费一些代价:例如,如果构造函数接受参数并将它们用作数据库查询的一部分,会怎么样?在那种情况下,使用clone()
会更便宜,因为不会发生昂贵的查询操作。
尽管还有其他原因使用这种设计模式:大多数情况下,当对象在使用之前需要复杂的设置时,无法在构造函数中方便地完成。想象一下,一个对象有20个属性需要设置。如果你用构造函数参数设置它们,那个构造函数会非常丑陋 - 设想一个具有20个参数的构造函数!相反,您可以构建一个可能不带参数的对象,使用增变器方法设置20个值,然后在需要时使对象可以制作现成的副本。 clone()
完全不需要任何参数,所以它显然不那么难看。如果您需要该对象的多个不同版本的多个副本,那么原型模式变得很有吸引力。
相关问题
- 1. Java模型对象设计
- 2. 创建对象的设计模式
- 3. 创建对象的设计模式
- 4. c原型设计模式#
- 5. Swift原型设计模式
- 6. 三ROME对象模型设计模式
- 7. 原型和对象创建
- 8. 对象模型设计
- 9. 以不同方式从另一个对象创建对象的设计模式
- 10. 对象和对象元模式设计
- 11. 用于创建一组数据对象的设计模式
- 12. 面向对象设计 - 创建策略/模式
- 13. 用于创建子类对象实例的设计模式
- 14. 从文件创建对象的设计模式?
- 15. vtk中的对象创建设计模式
- 16. 查询对象模式(设计模式)
- 17. 原型设计模式vs ICloneable
- 18. 事件/类设计模式(原型)
- 19. 在java switch语句中创建新对象。可供选择的设计模式?
- 20. 动态创建模型对象时在模型中设置值
- 21. Javascript原型继承和对象创建
- 22. 在类中创建更多对象的面向对象的设计模式(c#)
- 23. 以下原型设计模式的春天原型
- 24. 原型模式创建新的属性
- 25. 使用Java创建原始类型/对象反射
- 26. 在通过Object.create创建的对象上设置原型
- 27. 如何从原始对象创建一个Eloquent模型实例?
- 28. 试图创建视图模型设计模式来填充DropdownList
- 29. 使用原型,构建器模式的Java对象克隆(附加类成员)
- 30. 对象模型设计选择
这可能对您有所帮助http://stackoverflow.com/questions/663079/does-cloning-provide-a-performance-improvement-over-constructors-factory-methods – 2012-07-29 05:27:43