Supongamos que tengo una jerarquía de clases en Java:patrón de diseño de envío?
interface Item { ... };
class MusicBox implements Item { ... };
class TypeWriter implements Item { ... };
class SoccerBall implements Item { ... };
y tengo otra clase en el mismo paquete:
class SpecialItemProcessor {
public void add(Item item)
{
/* X */
}
}
donde quiero hacer algo diferente para cada tipo de elemento, pero Don 't desea definir esa acción en las diferentes clases Item
(MusicBox
, TypeWriter
, SoccerBall
).
Una manera de manejar esto es:
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 ...
}
}
}
Esto funciona, pero parece muy torpe. ¿Hay alguna forma mejor de hacerlo, cuando conozco casos especiales? (obviamente si Item
contiene un método doSomethingSpecial
entonces puedo simplemente llamar al método de ese artículo sin importar de qué tipo es, pero si no quiero que ocurra esa diferenciación dentro del mismo artículo, ¿cómo lo manejo?)
No es una respuesta Lo sé, pero aparentemente en ActionScript 3 se puede crear una instancia de una Cadena (es decir, 'com.djw.MusicBox' puede crear una instancia de MusicBox), este tipo de cosas posibles en Java tal vez? ¡Sólo una sugerencia! – danjah
@dan: 'Clase # forName()'. Sin embargo, cuestiono el valor aquí. – BalusC