Java 对象的引用问题

Java 对象的引用问题,java,reference,singleton,Java,Reference,Singleton,假设我有一个模型,这个模型是单例的,所以只有一个实例。我将这个模型传递给其他类,它们将它保存在一个变量中 然后,稍后我用模型的序列化版本替换同一个模型的原点。其他持有此模型变量的类,它们仍然指向旧的引用,对吗 如何用新引用替换模型,并让所有其他类指向这个新引用?如果这些其他对象都包含对单例的引用,则需要通过(重新)调用传入新实例的方法并重新设置变量来手动更新它们 更聪明的方法是传递一个简单的包装器对象,该对象本身引用了单例,所有其他对象都通过它来访问它。当需要更新到新的单例时,只需更改包装器的引

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

然后,稍后我用模型的序列化版本替换同一个模型的原点。其他持有此模型变量的类,它们仍然指向旧的引用,对吗


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

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

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


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

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

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


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

通常,序列化和反序列化单例是一个非常糟糕的主意,您可能会得到该对象的多个实例,而它可能不再作为一个单独的对象。我宁愿序列化我的单例所包含的主要内容,而不是整个对象本身


如果您确实需要进行serlialize,那么您可能必须利用某种类型的注册表,在这种注册表中,使用类注册它们自己,并且序列化会将更改通知所有注册的类

通常情况下,序列化和反序列化一个单例是一个非常糟糕的主意,您可能会得到大量的对象实例,并且它可能不再作为单例使用。我宁愿序列化我的单例所包含的主要内容,而不是整个对象本身


如果您确实需要进行serlialize,那么您可能必须利用某种类型的注册表,在这种注册表中,使用类注册它们自己,并且序列化会将更改通知所有注册的类

我想我喜欢有一个观察者界面来警告任何人模型发生了变化,谢谢。@Pat,有点像,尽管这里的可观察对象不是单例(因为整个引用发生了变化):-)。您需要有一个更静态的可观察对象,例如注册表,所有使用者都注册自己,序列化过程会通知它更改!我想我喜欢有一个观察者界面来警告任何人模型发生了变化,谢谢。@Pat,有点像,尽管这里的可观察对象不是单例(因为整个引用发生了变化):-)。您需要有一个更静态的可观察对象,例如注册表,所有使用者都注册自己,序列化过程会通知它更改!