Я создаю систему данных для хранения различных предметов для игры, и я не уверен, какой организационный стиль более эффективен. Например, у меня есть класс Item, и создание подкласса Weapon и другого подкласса Melee, который расширяет Weapon, будет более или менее эффективным, чем просто создание нескольких переменных в классе Item, который содержит, является ли это оружием, доспехами или другим, и другим, который держится, если это рукопашный или дальний бой или шлем ... и т. д. Или их комбинация будет эффективной и организованной до такой степени, что будет легко манипулировать?
Эффективная организация классов с подклассами и переменными в Java
Ответы (2)
Вопрос широкий, но, вообще говоря, лучше создавать подклассы, а не хранить лишние переменные в каком-то базовом элементе.
Начните с баз и продвигайтесь вниз.
public class Item {
private String name;
...
}
public class Weapon extends Item {
...
}
public class Melee extends Weapon {
...
}
public class Ranged extends Weapon {
...
}
Таким образом, вы можете определить такие вещи, как
public class Dagger extends Melee {
...
}
и вам не придется беспокоиться об определении полей, общих для всех элементов, таких как имя.
Это не поможет с проблемой дизайна, но, поскольку это игра, вы также можете заглянуть в Lightweight Java Game Library, если вы еще этого не сделали.
Предполагая, что атрибуты всех элементов связаны (все они имеют атрибут durability
), было бы разумно иметь родительский класс, который хранит и обрабатывает это. Точно так же, если все оружие связано (все они имеют атрибут damage
), имеет смысл иметь родительский класс, который хранит и обрабатывает это.
Поскольку между элементами существует много взаимосвязей, вам следует создавать подклассы, а не пытаться делать это в каждом конкретном случае. Это также позволяет вам изменить способ обработки упомянутых родительских атрибутов (более эффективный и точный алгоритм) в одном месте, а не в нескольких.