Ссылочная проблема с объектом - PullRequest
1 голос
/ 15 декабря 2011

Допустим, у меня есть модель, эта модель - одиночка, поэтому есть только один экземпляр. Я передаю эту модель другим классам, и они хранят ее в переменной.

Затем я заменяю эту модель в исходной точке сериализованной версией модели. Другие классы, которые содержат переменную этой модели, они все равно будут указывать на старое ссылочное право?

Как мне заменить модель новой ссылкой и заставить все другие классы указывать на эту новую?

Ответы [ 2 ]

1 голос
/ 15 декабря 2011

Если все эти другие объекты содержат ссылки на синглтон, вам нужно будет вручную обновить их путем (повторного) вызова методов, передающих новый экземпляр и переустанавливающих переменные.

Разумнее было бы обойти простой объект-обертку, который сам ссылался на синглтон и через который все другие объекты обращались к нему. Когда вам нужно было обновиться до нового синглтона, вам нужно будет только изменить ссылку на оболочку.

Типичные реализации синглтонов упрощают это еще больше, просто публично предоставляя статический метод get() классу синглтонов и предоставляя другим классам возможность вызывать этот метод, вместо того, чтобы передавать синглтон как посетитель.

0 голосов
/ 15 декабря 2011

Как правило, сериализация и десериализация Singleton - это очень плохая идея, вы можете получить несколько экземпляров объекта, и он больше не может служить своей цели как singleton.Я бы предпочел сериализовать основное содержание того, что хранится в моем синглтоне, а не весь сам объект.

Если у вас возникнет такая необходимость в сериализации, вам, возможно, придется использовать какой-то реестр при использованииклассы регистрируют себя, и сериализация уведомляет все зарегистрированные классы об изменении.

...