Если это поможет, то следующий вопрос в контексте игры, которую я строю.
В нескольких разных местах у меня следующий сценарий. Существует родительский класс, для этого примера называется Skill, и у меня есть несколько подклассов, реализующих методы из родительского класса. Также существует другой родительский класс, который мы будем называть Vocation. Навыки должны быть перечислены в разных подклассах Vocation. Тем не менее, эти навыки должны быть доступны для всего в игре, которая использует любое задание.
Моя текущая установка состоит в том, чтобы иметь Enum с именем Skill.Id, так что Vocation содержит коллекцию значений из этого Enum, а когда сущность в игре получает это Vocation, коллекция передается в другой класс, называемый SkillFactory. Skill.Id требуется новая запись каждый раз, когда я создаю новый подкласс Skill, а также регистр в блоке переключателя для конструктора новых подклассов.
т.е:.
//Skill.Id
Enum{FireSkill,WaterSkill,etc}
//SkillFactory
public static Skill Create(Skill.Id id)
{
switch(id)
{
case Skill.Id.FireSkill:
return new FireSkill();
//etc
}
}
Это прекрасно работает, но использование enum и блока переключателей в качестве переходного периода выглядит как дополнительная нагрузка, чем мне нужно для решения этой проблемы. Есть ли более элегантный способ создания экземпляров этих подклассов навыков, но все же позволяет Vocation содержать коллекцию, идентифицирующую навыки, которые он может использовать?
Редактировать: Я прекрасно выбрасываю enum и связанный с ним блок переключателей, если Vocation может содержать коллекцию, которая позволяет произвольно создавать экземпляры подклассов Skill.