Почему бы не использовать оператор instanceof в дизайне ООП?
Неоднократно говорилось, что оператор instanceof не должен использоваться, кроме как в методе equals (), иначе он 'плохой ООП дизайн.
Некоторые писали, что это тяжелая операция, но кажется, что, по крайней мере, Java, справляется с этим довольно хорошо (даже более эффективно, чем сравнение Object.toString ()).
Может кто-нибудь объяснить, или направить меня к какой-то статье, которая объясняет, почему это плохой дизайн?
Учти это:
Class Man{
doThingsWithAnimals(List animals){
for(Animal animal : animals){
if(animal instanceOf Fish){
eatIt(animal);
}
else if(animal instanceof Dog){
playWithIt(animal);
}
}
}
...
}
Решение о том, что делать с животным, остается за человеком. Мужчина'Желания также могут время от времени меняться, решая съесть собаку и поиграть с рыбой, пока животные нет изменить.
Если вы считаете, что оператор instanceof имеет неправильный дизайн ООП, расскажите, пожалуйста, как бы вы сделали это без instanceof и почему?
Благодарю.