Как мне написать метод, который имеет одинаковую реализацию для нескольких видов объектов (Java)? - PullRequest
0 голосов
/ 20 февраля 2020

Я пишу (в настоящее время) основанную на String игру Pokemon в Java. С имеющейся у меня структурой в настоящее время есть 2 вида объектов, для которых я хочу сделать сопоставления типов: Pokemon и move. Метод, который я хочу написать (isStrongAgainst ()), будет одинаковым для обоих. Например, покемон типа воды и ход типа воды сильны против покемона огненного типа, но эти сравнения могут подразумевать разные вещи в зависимости от контекста. Оба класса по-разному реализовали методы isType ().

У меня была идея использовать интерфейс, который реализует метод isStrongAgainst () по умолчанию и объявляет абстрактный метод isType (). Я думаю, что, поскольку любой класс, который реализует этот интерфейс, должен был бы реализовать isType (), я мог бы использовать его в своем isStrongAgainst (), но я не могу. Есть ли способ обойти это или лучшее предложение, учитывая мою проблему?

public interface TypeMatch<T> {
    boolean isType(Type t);
    default boolean isStrongAgainst(Pokemon opponent){
        if(T.isType(Type.NORMAL)){
            return false;
        }
        if(T.isType(Type.WATER)){
            return opponent.isType(Type.FIRE) ||
                    opponent.isType(Type.ROCK) ||
                    opponent.isType(Type.GROUND);
        } //etc...

Ответы [ 3 ]

0 голосов
/ 20 февраля 2020

Я думаю, что функцию isStrongAgainst() можно улучшить еще больше. Было бы лучше сделать реализацию isType() таким образом, чтобы она возвращала true, если противник слабее нас.

Это может быть использовано в функции isStrongAgainst() непосредственно при ее возврате заявление.

Best

PS: Я сейчас на уроке и после окончания обучения дам более подробный ответ, до тех пор, если это возможно, попытаться получить некоторая идея о том, что я сказал.

0 голосов
/ 20 февраля 2020

Вы можете:

  1. определить Pokemon как абстрактный класс для реализации TypeMatch
  2. переместить isStrongAgainst (оппонент Pokemon) из TypeMatch в Pokemon.
  3. любой класс, который расширяет Pokemon имеет ту же реализацию isStrongAgainst (противник Pokemon)
0 голосов
/ 20 февраля 2020

Насколько вы понимаете, ваша игра содержит различное поведение в зависимости от типа покемона. Я настоятельно рекомендую вам использовать шаблон разработки стратегии .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...