2011-12-15 74 views
1

假設我有一個模型,這個模型是一個單例,所以只有一個實例。我將這個模型傳遞給其他類,並將它保留在一個變量中。對象的引用問題

然後,我將它的原點替換爲該模型的序列化版本。其他類包含這個模型的變量,他們仍然會指向舊的引用權限?

我該如何去替換一個新的參考模型,並讓所有其他類指向這個新的?

回答

1

如果這些其他對象都持有對單例的引用,則需要通過(重新)調用在新實例中傳遞的方法並重新設置變量來手動更新它們。

更聰明的方法是傳遞一個簡單的包裝對象,它本身引用了單例,並且所有其他對象通過它來訪問它。當你需要更新到新的單例時,你只需要改變包裝器的引用。

典型的單例實現通過在singleton類上公開暴露一個靜態方法get(),並將其留給其他類來調用此方法,而不是像訪問者一樣傳遞單例。

+0

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

0

通常,序列化和反序列化辛格爾頓是個很糟糕的主意,你可以用一個編號的對象實例的結束,它可能無法達到其目的作爲一個單身了。我寧願序列化我的單身人士所擁有的主要內容,而不是整個對象本身。

如果你做這樣的需要serlialize土地時,您可能需要利用某種哪裏使用類註冊自己和系列化通知所有註冊類變化的註冊表。

+0

我想就像一個觀察者接口,警告任何人,該模型改變了,謝謝。 – 2011-12-15 03:56:48