Во время кодирования я часто сталкиваюсь с этой ситуацией:Как сохранить и загрузить различные типы объектов?
- У меня есть несколько объектов (
ConcreteType1
,ConcreteType2
, ...) с тем же базовым типомAbstractType
, который имеет абстрактные методыsave
иload
. Каждый объект может (и должен) сохранять некоторые данные определенного типа, переопределяя методsave
. - У меня есть список
AbstractType
объектов, который содержит различныеConcreteTypeX
объектов. - Я просматриваю список и метод
save
для каждого объекта.
На данный момент я считаю, что это хороший дизайн OO. (Или я не прав?) Проблемы начинаются, когда я хочу перезагрузить данные:
Каждый объект может загружать собственные данные, но я должен знать конкретный тип заранее, поэтому я могу создать экземпляр справа ConcreteTypeX
и позвонить метод load
. Поэтому метод загрузки должен много знать о конкретных типах. Я обычно «решал» эту проблему, написав какой-то маркер перед вызовом save
, который используется загрузчиком для определения правильного ConcreteTypeX
.
У меня всегда было/было плохое чувство об этом. Это похоже на какой-то анти-шаблон ...
Есть ли лучшие способы?
EDIT: Прошу прощения за путаницу, я переписал часть текста. Я знаю сериализацию, и, возможно, в Java/.NET/yourFavoriteLanguage есть некоторое совершенное решение, но я ищу общее решение, которое может быть лучше и более «OOP-ish» по сравнению с моим концепция.
Ирония, я обычно заклинаю ее с помощью 's', поскольку я - британский! – 2008-11-15 14:36:40
Ах, ха! Поэтому мы терзаем вас. Когда вы начинаете пить кофе вместо чая, тогда мы можем претендовать на победу! – 2008-11-15 14:39:58