Мы преобразуем входящие данные (в формате JSON, но это может быть XML или что-то еще) в неизменяемые объекты Java, используя самый простой метод:
// pseudocode
Npc[] npcs;
for (jsonNPC : jsonNPCs) {
Quest[] quests;
for (jsonQuest : jsonNPC.quests) {
quests.add(new Quest(jsonQuest.get(foo), jsonQuest.get(bar), ...));
}
npcs.add(new Npc(jsonNPC.get(name), quests, ...));
}
Это отлично работает, но становится все сложнее. Теперь мы хотим, чтобы квесты ссылались на другие Quest
экземпляры как на «обязательные квесты».
Проблема в том, что реферальный квест может быть проанализирован только после создания реферального квеста (входные данные не упорядочены и не могут быть, поскольку между NPC могут быть двунаправленные ссылки). Это означает, что мы не можем прикрепить его во время строительства. Но поскольку Quest
является неизменным, мы должны.
Как обычно решается такая проблема?
(Примечание: циркулярных ссылок нет. Думаю, это должно помочь)