假设我在 Java 中有一个类层次结构:
interface Item { ... };
class MusicBox implements Item { ... };
class TypeWriter implements Item { ... };
class SoccerBall implements Item { ... };
我在同一个包中有另一个类:
class SpecialItemProcessor {
public void add(Item item)
{
/* X */
}
}
我想为每种项目类型做一些不同的事情,但我不想在不同的Item
类(、、、MusicBox
)TypeWriter
中定义该操作SoccerBall
。
处理此问题的一种方法是:
class SpecialItemProcessor {
public void add(Item item)
{
if (item instanceof MusicBox)
{
MusicBox musicbox = (MusicBox)item;
... do something ...
}
else if (item instanceof MusicBox)
{
TypeWriter typewriter = (TypeWriter)item;
... do something ...
}
else if (item instanceof SoccerBall)
{
SoccerBall soccerball = (SoccerBall)item;
... do something ...
}
else
{
... do something by default ...
}
}
}
这行得通,但它似乎真的很笨重。当我知道特殊情况时,有没有更好的方法来做到这一点?(显然,如果Item
包含一个方法doSomethingSpecial
,那么我可以只调用该项目的方法而不关心它是什么类型,但是如果我不希望在项目本身中发生这种差异,我该如何处理它?)