何时使用克隆(请不要定义)?我可以启动一个对象并使用该对象,那么为什么要在现实世界中使用clone呢?
浅层克隆的动机是什么(我知道它复制了值类型并引用了引用类型)?
请给我一个现实世界的例子,而不是克隆,深度克隆或浅克隆的定义 .
提前致谢 .
请给我一个现实世界的例子
如果您的对象不是线程安全的,但您可以将其克隆到多个独立实例,则可以在不同的线程上使用这些单独的实例 .
几天前我用过的一个例子:
我开发了一个基于第三方组件打印不同类型文档的组件 .
在我的上下文中,这是一个复杂的结构,而不是“便宜”和“容易”实例化 . 有时我需要多个打印组件 . 因此,使用浅层克隆并仅替换config-object(打印组件的“子对象”,它提供所有打印相关的环境信息)为我提供了我需要的lees工作量 .
例如,您可能希望保留当前对象值,并且在某些情况下,您可能希望回滚到以前的值 . 考虑应用程序的设置 . 在设置窗口中,您可以按取消或保存 . 如果按取消,则需要放弃所有更改 . 所以你克隆设置对象,向用户显示它,如果按下保存只是从克隆对象获取值并设置为真实对象
3 回答
如果您的对象不是线程安全的,但您可以将其克隆到多个独立实例,则可以在不同的线程上使用这些单独的实例 .
几天前我用过的一个例子:
我开发了一个基于第三方组件打印不同类型文档的组件 .
在我的上下文中,这是一个复杂的结构,而不是“便宜”和“容易”实例化 . 有时我需要多个打印组件 . 因此,使用浅层克隆并仅替换config-object(打印组件的“子对象”,它提供所有打印相关的环境信息)为我提供了我需要的lees工作量 .
例如,您可能希望保留当前对象值,并且在某些情况下,您可能希望回滚到以前的值 . 考虑应用程序的设置 . 在设置窗口中,您可以按取消或保存 . 如果按取消,则需要放弃所有更改 . 所以你克隆设置对象,向用户显示它,如果按下保存只是从克隆对象获取值并设置为真实对象