Строительство бетонных объектов из файлов. Есть какой-либо шаблон дизайна, подходящий для этого?

Я должен сказать, что всегда стараюсь сделать код простым и красивым, в основном используя шаблоны проектирования, когда это возможно. Кроме того, я впечатлен, что не нашел ничего связанного с этим в Интернете (кроме простых и очень расплывчатых примеров, в основном в javascript с использованием json).

Сценарий таков: я должен анализировать / создавать конкретные объекты из файла, содержимое которого может быть в формате XML, JSON и / или других форматах. Вот пример:

Бетонный объект:

// Contains the common states for the entities
struct EntityModel
{
int hp;
int level;
int armor;
int speed;

// Other attributes...
};

class Entity
{
// Stuff (protected/public/private attributes and functions/methods)

private:
EntityModel* m_model; // Pointer to the model used (flyweight)

// Other attributes...
}

Файл (в данном случае XML):

<entity name="Skeleton" class="Undead">
<attributes>
<hp value="150" />
<level value="10" />
<armor value="75" />
<speed value="15" />
<width value="32" />
<height value="32" />
<experience value="372" />
<texture value="skeleton.png" />
<intelligence value="skeleton.script" />
</attributes>
<restistances>
<resist type="Shock" value="30" />
<resist type="Fire" value="10" />
</resistances>
<attacks>
<spell name="Blizzard" mp="50" damage="130" distance="0" />
<spell name="Fireball" mp="30" damage="100" distance="0" />
</attacks>
<loot>
<drop item="Gold Coin" min="30" max="50" probability="1" />
<drop item="Ruby" min="0" max="2" probability="0.7" />
<drop item="Enchanted Sword" probability="0.25" />
</loot>
</entity>

Это пример взаимосвязи между моделью объекта и его файлом. Также будут другие объекты, которые должны быть в состоянии проанализировать / построить / создать из их файлов.

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

Так, вопрос в том: Есть ли правильный способ сделать это? Который из?

Я буду основываться на ответе для этого самого случая и адаптироваться к другим объектам, как я уже говорил. Другими словами, мне нужен общий ответ.

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

Заранее спасибо.

2

Решение

Попробуйте Библиотека повышения сериализации. Он имеет xml, бинарный и текстовый форматы сохранения. Это не слишком сложно и имеет хорошую документацию.

0

Другие решения

Я рекомендую производную от Фабричный дизайн шаблон.

Шаблон позволяет создавать объекты на основе критериев, таких как имя или номер. Традиционный шаблон создает объекты на основе общего базового класса.

0