Diseño Flashcards
¿Qué problema resuelve el patrón de Strategy en Java?
El patrón de estrategia le permite introducir un nuevo algoritmo o una nueva estrategia sin cambiar el código que usa ese algoritmo. Por ejemplo, el método Collections.sort () que ordena la lista del objeto usa el patrón de estrategia para comparar objetos. Dado que cada objeto utiliza una estrategia de comparación diferente, puede comparar varios objetos de forma diferente sin cambiar el método de clasificación.
¿Cuándo utilizar el patrón de diseño de estrategia en Java?
El patrón de estrategia es bastante útil para implementar un conjunto de algoritmos relacionados como algoritmos de compresión, estrategias de filtrado, etc. El patrón de diseño de estrategia le permite crear clases de contexto , que utilizan clases de implementación de estrategia para aplicar reglas de negocio.
Un buen ejemplo de un patrón de estrategia del propio JDK es un método Collections.sort () y la interfaz Comparator , que es una interfaz de estrategia y define una estrategia para comparar objetos. Debido a este patrón, no necesitamos modificar el método sort () (cerrado para modificación) para comparar cualquier objeto; al mismo tiempo, podemos implementar una interfaz de Comparador para definir una nueva estrategia de comparación (abierta para extensión).
Este patrón en realidad se basa en el principio de diseño abierto-cerrado y si comprende ese principio, entonces es bastante fácil para usted comprender el patrón de estrategia también. En realidad, es mejor conocer los principios SOLID, ya que muchos patrones de diseño se basan en eso.
Si está buscando un curso completo sobre principios de diseño orientado a objetos, le recomiendo que consulte Principios SOLID de diseño orientado a objetos de Steve Smith en Pluralsight. Este es un curso útil para cualquiera que busque fortalecer su conocimiento general de la arquitectura de software.
[Imagen]
¿En qué concepto de programación orientada a objetos se basa el patrón de diseño del decorador?
El patrón de decorador aprovecha la composición para proporcionar nuevas funciones sin modificar la clase original. Una muy buena pregunta directa para la ronda telefónica. Esto queda bastante claro en el diagrama UML del patrón Decorator, como puede ver, el Componente está asociado con un Decorator.
[Imagen]
¿Qué es el patrón Decorator en Java? ¿Puede dar un ejemplo de un patrón de decorador?
El patrón Decorator es otra pregunta popular sobre patrones de diseño de Java, que es común debido a su uso intensivo en el paquete java.io. BufferedReader y BufferedWriter son un excelente ejemplo de patrón decorador en Java.
Si desea obtener más información sobre cómo un patrón de Decorator puede ayudarlo a escribir un mejor código, también le sugiero que consulte el curso de Educación sobre patrones de diseño de software: mejores prácticas para desarrolladores de software . Este curso proporciona muchos ejemplos del mundo real en el lenguaje de programación Java, lo que facilita la comprensión y aplicación de estos patrones de diseño y la escritura de un mejor código.
[Imagen]
¿Cuál es la diferencia entre el patrón Decorator y Proxy en Java?
Otra pregunta y un truco complicados sobre el patrón de diseño de Java es que tanto Decorator como Proxy implementan la interfaz del Objeto que decoran o encapsulan. Como dije, muchos patrones de diseño de Java pueden tener una estructura similar o exactamente la misma, pero difieren en su intención.
El patrón Decorator se usa para implementar la funcionalidad en un objeto ya creado, mientras que un patrón Proxy se usa para controlar el acceso a un objeto.
Una diferencia más entre el patrón de diseño Decorator y Proxy es que el Decorator no crea un objeto; en su lugar, obtiene el objeto en su constructor, mientras que Proxy en realidad crea objetos. También puede leer el análisis y diseño de Head First para entender la diferencia entre ellos.
¿Cuándo usar el patrón de diseño Singleton en Java?
Cuando necesita solo una instancia de una clase y desea que esté disponible globalmente, puede usar el patrón Singleton . Sin embargo, no es gratuito porque aumenta el acoplamiento entre clases y las hace difíciles de probar. Esta es una de las preguntas de patrones de diseño más antiguas de las entrevistas de Java. Consulte la respuesta para una discusión más detallada.
¿Qué es el bloqueo doble verificado en Singleton?
El entrevistador nunca dejará de hacer esta pregunta. Es la madre de todas las preguntas frecuentes en Java. Singleton significa que podemos crear solo una instancia de esa clase, en términos de singleton DCL es la forma de garantizar que, a cualquier costo, solo se cree una instancia en un entorno de subprocesos múltiples, es posible que simultáneamente dos subprocesos intenten crear una instancia de clase singleton en En esa situación, no podemos estar seguros de que solo se cree una instancia, así que evite esta situación usando el bloqueo de doble verificación usando el bloque sincronizado donde creamos el objeto.
Ejemplo de código: [Imagen]
¿Cómo se crea Singleton seguro para subprocesos en Java?
Suele ser un seguimiento de las preguntas anteriores de Java. Hay más de una forma de hacerlo. Puede crear una clase Singleton segura para subprocesos en Java creando la única instancia durante la carga de la clase. Los campos estáticos se inicializan durante la carga de la clase y Classloader garantizará que la instancia no será visible hasta que esté completamente creada. Puede ver más mi artículo para obtener un ejemplo de código para crear un singleton seguro para subprocesos en Java.
¿Puede escribir Singleton seguro para subprocesos en Java?
Hay varias formas de escribir Singleton seguro para subprocesos en Java, como escribiendo singleton con bloqueo de doble verificación, mediante el uso de una instancia estática Singleton inicializada durante la carga de la clase. Por cierto, usar la enumeración de Java para crear singleton seguro para subprocesos es la forma más simple. Consulte Por qué Enum singleton es mejor en Java para obtener más detalles.
¿Cuál es la diferencia entre los patrones de State y de Strategy?
- Aunque la estructura o el diagrama de clases del patrón de Estado y Estrategia es el mismo, su intención es completamente diferente. El patrón de estado se usa para hacer algo específico según el estado, mientras que la estrategia le permite cambiar entre algoritmos sin cambiar el código que lo usa.
- Esta es una pregunta interesante de entrevista de patrón de diseño de Java ya que tanto el patrón de estrategia como el de estado tienen la misma estructura. Si observa el diagrama de clases de UML para ambos patrones, se ven exactamente iguales, pero su intención es totalmente diferente.
El patrón de diseño de estado se usa para definir y administrar el estado de un objeto, mientras que el patrón de estrategia se usa para definir un conjunto de algoritmos intercambiables, y el cliente debe elegir uno de ellos. Por lo tanto , el patrón de estrategia es un patrón impulsado por el cliente, mientras que Object puede administrar su estado por sí mismo.
¿Cuál es la diferencia entre Asociación, Agregación y Composición en OOP?
Cuando un objeto está relacionado con otro objeto se llama asociación. Tiene dos formas, agregación y composición. la primera es la forma de asociación laxa donde el objeto relacionado puede sobrevivir individualmente, mientras que más tarde es una forma más fuerte de asociación donde un objeto relacionado no puede sobrevivir individualmente. Por ejemplo, la ciudad es una agregación de personas pero es la composición de partes del cuerpo.
¿Cuál es la diferencia entre el patrón Decorador, Proxy y Adaptador en Java?
De nuevo, se ven similares porque su estructura o diagrama de clases es muy similar, pero su intención es bastante diferente. Decorator agrega funcionalidad adicional sin tocar la clase, Proxy proporciona control de acceso y Adapter se usa para hacer que dos interfaces incompatibles funcionen juntas.
¿Cuál es el principio de diseño orientado a 5 objetos de SOLID?
SOLID es el término dado por el tío Bob en su libro clásico, el Código Limpio , uno de los libros de lectura obligada para los programadores. En SOLID, cada carácter representa un principio de diseño:
S para el principio de responsabilidad única
O para el principio de diseño abierto cerrado
L para el principio de sustitución de Liskov
I para el principio de segregación de interfaz
D para el principio de inversión de dependencia
¿Cuál es la diferencia entre composición y herencia en OOP?
Esta es otra gran pregunta sobre el concepto de OOPS porque prueba lo que importa, ambos son muy importantes desde la perspectiva del diseño de la clase. Aunque tanto la composición como la herencia le permiten reutilizar el código, antes es más flexible que después. La composición permite que la clase obtenga una característica adicional en tiempo de ejecución, pero la herencia es estática. No puede cambiar la función en tiempo de ejecución mediante la sustitución de una nueva implementación. Vea la respuesta para una discusión más detallada.
¿Cuál es el patrón de diseño de Observer en Java? ¿Cuándo usas el patrón Observer en Java?
Esta es una de las preguntas de entrevista de patrones de diseño de Java más comunes. El patrón del observador se basa en la notificación, hay dos tipos de objeto Sujeto y Observador. Siempre que haya un cambio en el estado del sujeto, el observador recibirá una notificación. Consulte ¿Qué es el patrón de diseño de Observer en Java con ejemplos de la vida real para obtener más detalles?