Замените If / Else, используя полиморфизм в Java - PullRequest
0 голосов
/ 30 марта 2020

Я хочу удалить многие условия if / else из моего кода. Я выбираю полиморфизм, чтобы заменить его. Я понял путь. Я копирую источник, который нашел в Inte rnet.

abstract class Bird {
  // ...
  abstract double getSpeed();
}

class European extends Bird {
  double getSpeed() {
    return getBaseSpeed();
  }
}
class African extends Bird {
  double getSpeed() {
    return getBaseSpeed() - getLoadFactor() * numberOfCoconuts;
  }
}
class NorwegianBlue extends Bird {
  double getSpeed() {
    return (isNailed) ? 0 : getBaseSpeed(voltage);
  }
}

// Somewhere in client code
speed = bird.getSpeed();

Я согласен с вышеуказанным дизайном. Но я сомневаюсь, что если создание экземпляра объекта bird зависит от другого условия if / else. Тогда как его решить? Я очень смущен. Пожалуйста, простите меня. Это может быть очень тривиально. например,

if (LocalDateTime.now().getMonth().toString().equalsIgnoreCase("march")) {
    Bird aBird = new European();
} else if (LocalDateTime.now().getMonth().toString().equalsIgnoreCase("August")) {
    Bird aBird = new African();
}
speed = aBird.getSpeed();

Пожалуйста, дайте мне знать, как я могу покончить с этим, если / еще.

1 Ответ

0 голосов
/ 30 марта 2020

вы должны использовать if / else, потому что конструктор работает только для реализованного класса

, вы можете сделать это немного лучше, как это:

Bird aBird = null;
String month = LocalDateTime.now().getMonth().toString();
if ("march".equalsIgnoreCase(month)) {
    aBird = new European();
} else if ("August".equalsIgnoreCase(month)) {
    aBird = new African();
}
speed = aBird.getSpeed();

реализация фабрики.

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