我想从代码中删除许多if/else条件。我选择多态性来代替它。我已经理解了方法。我正在复制我在网上找到的资料。
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();
如果/否则,请告诉我该怎么办。
您必须使用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();
工厂的实施。