Во время кодирования я часто сталкиваюсь с такой ситуацией:
- У меня есть несколько объектов (
ConcreteType1
, ConcreteType2
, ...) с одним и тем же базовым типом AbstractType
, который имеет абстрактные методы save
и load
. Каждый объект может (и должен) сохранять данные определенного типа, переопределяя метод save
.
- У меня есть список
AbstractType
объектов, который содержит различные ConcreteTypeX
объекты.
- Я прохожу список и метод
save
для каждого объекта.
На данный момент я думаю, что это хороший ОО дизайн. (Или я не прав?) Проблемы начинаются, когда я хочу перезагрузить данные:
Каждый объект может загружать свои собственные данные, но мне нужно заранее знать конкретный тип, чтобы я мог создать экземпляр ConcreteTypeX
и вызвать метод load
. Таким образом, метод загрузки должен знать много о конкретных типах. Я обычно «решал» эту проблему, написав какой-то маркер перед вызовом save
, который используется загрузчиком для определения правильного ConcreteTypeX
.
У меня всегда было / было плохое предчувствие по этому поводу. Похоже на некий анти-паттерн ...
Есть ли лучшие способы?
EDIT:
Прошу прощения за путаницу, я переписал часть текста.
Я знаю о сериализации и, возможно, в Java / .NET / yourFavoriteLanguage есть какое-то идеальное решение, но я ищу общее решение, которое могло бы быть лучше и более «оооооооооооооооооооооооо по моей концепции. .