【发布时间】:2016-12-30 14:57:50
【问题描述】:
假设我们有一个动物类,其子类为猫、鹰
现在我有一个方法:
public void process(Animal animal) {
if (animal instanceof Cat) {
if (!animal.meow()) {
throw exception("cat does not meow");
} else {
animal.feedFish();
}
}
if (animal instanceof eagle) {
if (!animal.fly()) {
throw exception("eagle does not fly");
} else {
animal.checkMaxFlightAltitude();
}
}
}
这里 cat 有两个方法 meow 和 feedfish 与 eagle 的方法 fly 和 checkmaxflight 完全不同
大多数设计模式都围绕着假设子类有一个共同的方法,如 Shape draw() 由 circle draw 和 square draw 继承
有没有办法对子类进行验证,例如不检查实例的 cat 和 eagle?
任何好的设计模式(假设子类不共享基类中的方法?)
【问题讨论】:
-
双发.
-
^^ 不要浪费时间查看 Double dispatch,这不是一个答案,甚至不是一个好主意。您的问题在其标题中包含答案:您可以使用继承摆脱 instanceof 检查。您目前不使用继承。使用继承,然后所有的动物都可以有一个“process()”方法。
-
@JavaDeveloper 这实际上就是Polymorphism 的意义所在!
标签: java oop inheritance design-patterns