我不得不说我总是尽量保持代码简洁美观,主要是尽可能使用设计模式。另外,我印象深刻,我没有在互联网上找到任何与此相关的内容(除了简单和非常模糊的例子,主要是使用json的javascript)。
场景是:我必须从文件中解析/构建具体对象,其内容可以是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>
这是实体模型与其文件之间关系的示例。还有其他对象必须能够从他们的文件中解析/构建/创建。
有些人可能会说在这种情况下设计模式并不是必需的,正如我在一些实现中看到的那样,尽管我确实认为有一种。整个实体创建系统涉及抽象工厂,池和flyweight模式(向工厂请求createEntity调用,它将查看是否已在池中创建并缓存了flyweight模型,或者创建并缓存新模型)。 / p>
所以,问题是:有没有正确的方法呢?哪一个?
正如我所说,我将根据这个案例的答案并适应其他对象创作。换句话说,我需要一个通用的答案。
如果这篇文章遗漏了一些信息,或者是错误的部分,请原谅我,因为这是我在这里的第一篇文章。
提前致谢。
答案 0 :(得分:0)
试试_outstandingMethodBlocks。它具有xml,二进制和文本保存格式。它不是太复杂,而且文档很好。
答案 1 :(得分:0)
我推荐使用工厂设计模式的衍生物。
该模式允许您根据标准(例如名称或编号)构造对象。传统模式基于公共基类创建对象。