Angenommen, ich eine Klassenhierarchie in Java haben:versand design muster?
interface Item { ... };
class MusicBox implements Item { ... };
class TypeWriter implements Item { ... };
class SoccerBall implements Item { ... };
und ich habe eine andere Klasse im gleichen Paket:
class SpecialItemProcessor {
public void add(Item item)
{
/* X */
}
}
wo ich etwas will anders für jeden Elementtyp tun, aber ich don Ich möchte diese Aktion in den verschiedenen Item
Klassen (MusicBox
, TypeWriter
, SoccerBall
) definieren.
Eine Möglichkeit, dies zu handhaben ist:
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 ...
}
}
}
Dies funktioniert, aber es scheint wirklich klobig. Gibt es einen besseren Weg, wenn ich von Sonderfällen weiß? (natürlich, wenn Item
enthält eine Methode doSomethingSpecial
dann kann ich einfach die Methode dieses Artikels anrufen, ohne sich darum zu kümmern, welcher Typ es ist, aber wenn ich nicht möchte, dass die Unterscheidung innerhalb des Elements selbst geschieht, wie gehe ich damit um?)
Keine Antwort ich weiß, aber in ActionScript 3 können Sie anscheinend eine Klasse aus einer Zeichenfolge instanziieren (dh; "com.djw.MusicBox" kann eine MusicBox instanziieren), ist so etwas ist vielleicht in Java möglich? Nur ein Vorschlag! – danjah
@dan: 'Klasse # forName()'. Ich stelle jedoch den Wert hier in Frage. – BalusC