2011-12-15 76 views
1

假设我有一个模型,这个模型是一个单例,所以只有一个实例。我将这个模型传递给其他类,并将它保留在一个变量中。对象的引用问题

然后,我将它的原点替换为该模型的序列化版本。其他类包含这个模型的变量,他们仍然会指向旧的引用权限?

我该如何去替换一个新的参考模型,并让所有其他类指向这个新的?

回答

1

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

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

典型的单例实现通过在singleton类上公开暴露一个静态方法get(),并将其留给其他类来调用此方法,而不是像访问者一样传递单例。

+0

好的谢谢,事情现在更清楚了。 – 2011-12-15 03:55:52

0

通常,序列化和反序列化辛格尔顿是个很糟糕的主意,你可以用一个编号的对象实例的结束,它可能无法达到其目的作为一个单身了。我宁愿序列化我的单身人士所拥有的主要内容,而不是整个对象本身。

如果你做这样的需要serlialize土地时,您可能需要利用某种哪里使用类注册自己和系列化通知所有注册类变化的注册表。

+0

我想就像一个观察者接口,警告任何人,该模型改变了,谢谢。 – 2011-12-15 03:56:48