2012-09-10 50 views

Respuesta

39

Decorator design pattern que explota encapsulation es lo que estás buscando.

Polimorfismo través de la herencia:

class Cat { 
    void meow() { 
    // meow... 
    } 
} 
class Lion extends Cat { 
} 

Polimorfismo través de la encapsulación (Decorator):

interface Cat { 
    void meow();  
} 
class Lion implements Cat { 
    private Cat cat; 
    void meow() { 
    this.cat.meow(); 
    } 
} 

ps. Más sobre decoradores: http://www.yegor256.com/2015/02/26/composable-decorators.html

+0

En su comentario al OP, usted declara que _polimorfismo sin herencia no es posible en Java_, pero aquí da un ejemplo de polimorfismo a través de la encapsulación. ¿Este ejemplo contradice la declaración anterior? – jaco0646

30

La solución simple es escribir una clase que implemente una interfaz en lugar de extender una clase base.

Otra solución es crear un proxy dinámico ... que es esencialmente una forma inteligente de implementar una interfaz sin escribir explícitamente la clase. Vea el Proxy javadoc para más detalles.

Y sí, estos son (o pueden ser) ejemplos del patrón de decorador, aunque la clave aquí es las técnicas de implementación en lugar del patrón de diseño.

3

De acuerdo con mi experiencia, en la mayoría de las entrevistas de trabajo las preguntas no buscan respuestas demasiado elaboradas, y la mayoría de las veces son solo preguntas difíciles, por lo que si pidieran específicamente polimorfismo sin extender una clase, entonces diría :

Sí, puede hacer que el polimorfismo dinámico mediante la implementación de una interfaz en lugar de extender una clase

entonces si le piden más opciones, entonces sería aceptable para abrir servidores proxy, los patrones o algo más.

Espero que ayude!

+2

Un buen entrevistador intentará averiguar 1) cuánto sabe, y 2) si sabe cómo elegir una solución adecuada, y 3) si puede comunicarse bien. Así que sí, la forma correcta de responder a esto sería ofrecer la solución simple, y * insinuar * que hay otras soluciones y patrones de diseño relacionados. Una respuesta "larga y contundente" en la que se requiere/espera una respuesta breve muestra deficiencias en las habilidades de comunicación (OMI). –

+0

Pero debo agregar que leí esta pregunta como para pedir información técnica, no para consejos sobre qué decir en el contexto de una entrevista. –

+2

'Una respuesta' larga y completa 'en la que se requiere/espera una respuesta corta muestra poca capacidad de comunicación (IMO).'; o una falta de conocimiento, ¿sí? Y esa diferencia es importante (IMO). Puede ser que a la empresa le cueste más dinero aumentar las habilidades de comunicación de alguien que enseñarle un patrón de diseño de Java. –

Cuestiones relacionadas