У меня есть следующая иерархия: Party - это базовый класс, расширенный Person и Corporation.
Мне нужно изменить объектный класс объекта в какой-то момент его жизни, и я не знаю, как лучше это сделать.
Я моделирую финансовый мир, так что у меня есть партия, которая может владеть акциями Корпорации, в то время как только Корпорация может иметь акционеров. Примерно так:
class Party {
public Set getShares();
}
class Corporation extends Party {
public Set getShareholders();
public void setShareholders(Party ss);
}
class Person extends Party {
... (some method still unknown)
}
Я создаю объекты, считывающие данные из источника, и может случиться так, что сначала я знаю только название стороны, но не знаю, будет ли это Человек или Корпорация.
Но мне нужно создать объект, поэтому я создаю общую партию. После этого может случиться так, что я узнаю больше информации, такой, что моя партия была корпорацией. Итак, мне нужно изменить класс, который представляет эту сущность, с партии на корпорацию.
До сих пор моим решением было создание нового объекта, копирование в него старых данных.
Но меня это не устраивает, и я задаюсь вопросом, каков наилучший способ, шаблон или что-то еще для реализации того, чего я хотел бы достичь.
Я подумал о шаблоне состояния , но думаю, что он лучше всего подходит для других ситуаций.
В общем, я не хочу, чтобы действительно менял класс объектов. Я хочу иметь некоторый механизм, чтобы заставить клиентские классы подчиняться контрактам разных типов. Т.е. я не хочу, чтобы класс мог вызывать setShareholder на Person, и не важно, как я могу этого достичь, я имею в виду, что, возможно, тот факт, что сущность является Person, может быть представлен другими способами, чем использование класс персоны.