Эффективная организация классов с подклассами и переменными в Java

Я создаю систему данных для хранения различных предметов для игры, и я не уверен, какой организационный стиль более эффективен. Например, у меня есть класс Item, и создание подкласса Weapon и другого подкласса Melee, который расширяет Weapon, будет более или менее эффективным, чем просто создание нескольких переменных в классе Item, который содержит, является ли это оружием, доспехами или другим, и другим, который держится, если это рукопашный или дальний бой или шлем ... и т. д. Или их комбинация будет эффективной и организованной до такой степени, что будет легко манипулировать?


person user2600691    schedule 19.07.2013    source источник


Ответы (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, если вы еще этого не сделали.

person Liam    schedule 19.07.2013

Предполагая, что атрибуты всех элементов связаны (все они имеют атрибут durability), было бы разумно иметь родительский класс, который хранит и обрабатывает это. Точно так же, если все оружие связано (все они имеют атрибут damage), имеет смысл иметь родительский класс, который хранит и обрабатывает это.

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

person Daniel    schedule 19.07.2013