【发布时间】:2020-03-31 04:55:21
【问题描述】:
我想从我的代码中删除许多 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();
我对上面的设计很满意。 但我的疑问是,如果鸟对象的实例化取决于另一个 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。
【问题讨论】:
-
很大程度上取决于程序的要求,目前我们还不太了解。在不相关的说明中,出于某种原因,我确实对您的班级名称有亲和力
-
你能告诉我你指的是什么类型的要求吗?我们可以假设我们的要求是从几只鸟中获得鸟的速度。但是鸟只在一年中的某些月份出现。我希望我能满足要求
-
既然您要创建对象,就会想到工厂设计模式。
-
这个应该有帮助!谢谢..让我试试看! stackoverflow.com/questions/3314333/…
-
@HovercraftFullOfEels 但是在地面上应该有一些 if/else 就像工厂的例子一样。如果我错了请纠正我
标签: java if-statement polymorphism