假设我有一个模型,这个模型是单身,所以只有一个实例。我将此模型传递给其他类,并将它保存在变量中。
然后我用模型的序列化版本在它的原点替换同一个模型。包含此模型变量的其他类,它们仍将指向旧的引用权吗?
我如何使用新引用替换模型并将所有其他类指向这个新类?
答案 0 :(得分:1)
如果这些其他对象都持有对单例的引用,则需要通过(重新)调用传入新实例的方法并重新设置变量来手动更新它们。
更聪明的方法是传递一个简单的包装器对象,该对象本身引用了单例,并且所有其他对象都通过它来访问它。当您需要更新到新的单例时,您只需要更改包装器的引用。
典型的单例实现通过公开在单例类上公开静态get()
方法,并将其留给其他类来调用此方法,而不是像访问者一样传递单例,从而进一步简化了这一过程。 / p>
答案 1 :(得分:0)
通常,对Singleton进行序列化和反序列化是一个非常糟糕的主意,您最终可能会遇到对象的多个实例,并且它可能不再作为单例服务于其目的。我宁愿序列化我的单身人士所拥有的主要内容而不是整个对象本身。
如果您确实需要进行serlialize,则可能必须利用某种类型的注册表,其中使用类自我注册并且序列化通知所有已注册的更改类。