我在理解XML反序列化如何帮助我通过XML文件定义类时遇到了困难。
假设我有两种怪物的新XML定义文件,如下所示:
<MonstersCollection>
<Monsters>
<Monster>
<MonsterName>Dragon<MonsterName>
<HitPoints>100</Hitpoints>
</Monster>
<Monster>
<MonsterName>Beast<MonsterName>
<HitPoints>75</Hitpoints>
</Monster>
</Monsters>
</MonstersCollection>
使用XML反序列化器,我得到了一个很好的List,里面有我的2个不同的怪物,一切都很好。
但是,我怎样才能轻松优雅地在其他地方实例化一个新的龙怪或野兽怪物?
我是否必须克隆List中的相应对象,还是有其他方法可以执行此操作?
最终,我希望能够做一些简单的事情:
MonsterType monsterType = MonsterType.Dragon
Monster newMonster = new Monster(monsterType)
让构造函数使用XML定义文件中的Dragon数据自动填充此新对象属性。
非常感谢任何帮助。
答案 0 :(得分:0)
一种方法是使用工厂模式。如果你有一个从XML文件中获得的怪物集合,你应该创建一个工厂类,它将创建一个怪物类型的怪物。这样,您的创建逻辑就与模型分离了
你的代码看起来像......
public class MonsterFactory
{
private readonly Monster[] _monsters;
public MonsterFactory(Monster[] monsters)
{
_monsters = monsters;
}
public Monster CreateMonster(MonsterType monsterType)
{
return _monsters.First(e => e.MonsterName == monsterType);
}
}
public enum MonsterType
{
Dragon,
Beast
}
public class Monster
{
public MonsterType MonsterName { get; set; }
public int HitPoints { get; set; }
}
并且通话就像
var dragon = new MonsterFactory(listOfMonsters).CreateMonster(MonsterType.Dragon);
希望这有帮助