引用对象的问题

时间:2011-12-15 02:35:26

标签: java reference singleton

假设我有一个模型,这个模型是单身,所以只有一个实例。我将此模型传递给其他类,并将它保存在变量中。

然后我用模型的序列化版本在它的原点替换同一个模型。包含此模型变量的其他类,它们仍将指向旧的引用权吗?

我如何使用新引用替换模型并将所有其他类指向这个新类?

2 个答案:

答案 0 :(得分:1)

如果这些其他对象都持有对单例的引用,则需要通过(重新)调用传入新实例的方法并重新设置变量来手动更新它们。

更聪明的方法是传递一个简单的包装器对象,该对象本身引用了单例,并且所有其他对象都通过它来访问它。当您需要更新到新的单例时,您只需要更改包装器的引用。

典型的单例实现通过公开在单例类上公开静态get()方法,并将其留给其他类来调用此方法,而不是像访问者一样传递单例,从而进一步简化了这一过程。 / p>

答案 1 :(得分:0)

通常,对Singleton进行序列化和反序列化是一个非常糟糕的主意,您最终可能会遇到对象的多个实例,并且它可能不再作为单例服务于其目的。我宁愿序列化我的单身人士所拥有的主要内容而不是整个对象本身。

如果您确实需要进行serlialize,则可能必须利用某种类型的注册表,其中使用类自我注册并且序列化通知所有已注册的更改类。