Java: ¿utiliza una clase única o múltiple para cada tipo?

7

Actualmente tengo una clase de Java llamada "nodo" que tiene varios campos. Los campos que se usan en la clase dependen de un campo llamado "tipo". Hay cerca de 10 (esto puede crecer) diferentes tipos de "nodos". Me preguntaba si es bueno tener una sola clase para manejar todos los tipos o tener una clase diferente para cada tipo. ¿Cuál es la mejor práctica de programación en estos casos? Me gustaría saber (o un enlace a preguntas / tutoriales similares) cómo se verá afectado el rendimiento (como la memoria, etc.) si uso una sola clase.

    
pregunta 500865 31.01.2012 - 20:15

5 respuestas

7

Este es un caso estándar para la herencia. Usted no incurre en problemas de rendimiento debido a la subclasificación. Si está realizando una conversión entre subtipos y supertipos, varias sentencias if se ejecutarán en tiempo de ejecución y se utilizarán para verificar las excepciones de conversión. En su modelo de clase única, deberá verificar su campo "tipo" cada vez que se acceda a un método o campo para ver si ese "tipo" particular de nodo tiene esos campos disponibles. La memoria tampoco debe ser una preocupación, ya que creará la misma cantidad de objetos en el modelo de clase única o en el modelo de herencia.

    
respondido por el Mike L. 31.01.2012 - 20:38
7

El sorteo está en el nombre de su variable: type . Está tratando de representar un tipo usando una variable cuando eso es exactamente para lo que son las clases. En su caso, consideraría refactorizar a Reemplazar el código de tipo con subclases .

Cada subclase debe contener los campos relevantes solo para ella. Al hacer esta refactorización, su código será más fácil de mantener y extender.

Un buen diseño generalmente supera (y generalmente ayuda) al rendimiento. En este caso, no te preocupes por eso.

    
respondido por el Gary Buyn 31.01.2012 - 20:40
0

Esta situación es el caso perfecto para aplicar el patrón de fábrica que básicamente crea la subclase requerida en base a entradas específicas. Además, no se debe abusar de la herencia, ya que los cambios a la súper clase pasan a las subclases.

    
respondido por el Y G 01.02.2012 - 14:14
-2

Puede ser un decorador o un patrón de diseño de estado o una composición

ya que estamos hablando de nodos aquí, el patrón compuesto es un buen candidato y dado que cada nodo puede comportarse de manera diferente según el tipo, podemos considerar cada instancia de nodo como estados con un manejo diferente de un comportamiento más genérico o podríamos tener una clase abstracta básica para un nodo y varias clases concretas que son solo decoradores para proporcionar funcionalidad adicional o comportamientos personalizados.

enlace

    
respondido por el Melvin Protacio 31.01.2012 - 20:50
-4

Yo diría que puede usar un patrón de diseño, subclases o incluso una sola clase. Depende de la dispersión de los campos.

¿La mayoría de los campos o solo unos pocos en una sola clase son nulos?

¿Hay muchos "tipos" diferentes involucrados?

Esas son preguntas que deben responderse antes de que se pueda tomar una decisión.

    
respondido por el Silvarion 08.07.2013 - 16:28

Lea otras preguntas en las etiquetas