Patrones de diseño en Java | Tutorial de patrones de diseño de Java

Los patrones de diseño en Java ayudan a los desarrolladores a crear código más fácil de mantener, flexible y comprensible. Encapsulan los conocimientos y la experiencia de arquitectos y desarrolladores de software experimentados, lo que facilita que los programadores más nuevos sigan las mejores prácticas establecidas.

¿Qué son los patrones de diseño?

Un patrón de diseño es una solución genérica repetible a un problema que ocurre con frecuencia en el diseño de software y que se utiliza en ingeniería de software. No es un diseño completo que pueda escribirse en código de inmediato. Es una descripción o modelo para la resolución de problemas que puede aplicarse en una variedad de contextos.

Tutorial de patrones de diseño de Java

Tipos de patrones de diseño en Java

Los patrones de diseño de Java se dividen en tres categorías:

  • creacional,
  • estructural y
  • patrones de diseño de comportamiento.

1. Patrones de diseño creacional en Java

Los patrones de diseño creacional son un subconjunto de patrones de diseño en el desarrollo de software. Se ocupan del proceso de creación de objetos, intentando hacerlo más flexible y eficiente. Independiza el sistema y cómo se crean, componen y representan sus objetos.

Tipos de patrones de diseño creacional en Java:

1.1 Método de fábrica

Factory Method es un patrón de diseño creacional que proporciona una interfaz para crear objetos en la superclase, pero las subclases son responsables de crear la instancia de la clase.

1.2 Método de fábrica abstracta

El método Abstract Factory es un patrón de diseño creacional que proporciona una interfaz para crear familias de objetos relacionados o dependientes sin especificar sus clases concretas.

1.3 Método de construcción

El método Builder es un patrón de diseño creacional, proporciona una interfaz para construir un objeto y luego tiene clases de construcción concretas que implementan esta interfaz para crear objetos específicos de manera paso a paso.

1.4 Método de prototipo

El método prototipo es un patrón de diseño creacional que permite crear nuevos objetos con la misma estructura y estado inicial que un objeto existente sin especificar explícitamente su clase o detalles de construcción.

1.5 Método singleton

El método Singleton es un patrón de diseño creacional que proporciona una clase tiene sólo una instancia, y esa instancia proporciona un punto global de acceso a ella.

2. Patrones de diseño estructural en Java

Los patrones de diseño estructural son un subconjunto de patrones de diseño en el desarrollo de software que se centran en la composición de clases u objetos para formar estructuras más grandes y complejas. Ayudan a organizar y gestionar las relaciones entre objetos para lograr una mayor flexibilidad, reutilización y mantenibilidad en un sistema de software.

Tipos de patrones de diseño estructural en Java:

2.1 Método del adaptador

El método del adaptador es un patrón de diseño estructural que le permite hacer que dos interfaces incompatibles funcionen juntas creando un puente entre ellas.

2.2 Método puente

El método del puente es un patrón de diseño estructural que proporciona al diseño separar la abstracción de un objeto de su implementación para que ambas puedan variar de forma independiente.

2.3 Método compuesto

El método compuesto es un patrón de diseño estructural que se utiliza para componer objetos en estructuras de árbol para representar jerarquías de parte y todo. Este patrón trata tanto objetos individuales como composiciones de objetos y permite a los clientes trabajar con estructuras complejas de objetos como si fueran objetos individuales.

2.4 Método decorador

El método decorador es un patrón de diseño estructural, i t permite agregar comportamiento a objetos individuales, ya sea estática o dinámicamente, sin afectar el comportamiento de otros objetos de la misma clase.

2.5 Método de fachada

El método Facade es un patrón de diseño estructural que proporciona una interfaz simplificada de nivel superior para un conjunto de interfaces en un subsistema, lo que facilita a los clientes la interacción con ese subsistema.

2.6 Método de proxy

El método proxy es un patrón de diseño estructural, Proporciona la creación de un sustituto de un objeto, que puede actuar como intermediario o controlar el acceso al objeto real.

2.7 Método de peso mosca

El método Flyweight es un patrón de diseño estructural, se usa cuando necesitamos crear muchos objetos de una clase. Dado que cada objeto consume espacio de memoria, lo que puede ser crucial para dispositivos con poca memoria, se puede aplicar un patrón de diseño de peso ligero para reducir la carga de memoria al compartir objetos.

3. Patrones de diseño de comportamiento en Java

Los patrones de diseño de comportamiento son un subconjunto de patrones de diseño en el desarrollo de software que se ocupan de la comunicación y la interacción entre objetos y clases. Se centran en cómo los objetos y las clases colaboran y se comunican para realizar tareas y responsabilidades.

Tipos de patrones de diseño de comportamiento en Java:

3.1 Método de comando

El método de comando es un patrón de diseño de comportamiento, promueve un acoplamiento flexible entre el remitente (cliente) y el receptor (el objeto que realiza la operación) y proporciona una manera de admitir operaciones que se pueden deshacer.

3.2 Método iterador

El método iterador es un patrón de diseño de comportamiento, i Proporciona una manera de acceder a elementos de un objeto agregado (una colección) secuencialmente sin exponer la representación subyacente de esa colección.

3.3 Método mediador

El método mediador es un patrón de diseño conductual, i Promueve un acoplamiento flexible entre objetos al centralizar su comunicación a través de un objeto mediador. En lugar de que los objetos se comuniquen directamente entre sí, se comunican a través del mediador, que encapsula la lógica de interacción y coordinación.

3.4 Método de recuerdo

El método Momento es un patrón de diseño de comportamiento que permite guardar y restaurar el estado anterior de un objeto sin revelar los detalles de su implementación.

3.5 Método del observador

El método observador es un patrón de diseño de comportamiento, define una dependencia de uno a muchos entre objetos, de modo que cuando un objeto (el sujeto) cambia de estado, todos sus dependientes (observadores) son notificados y actualizados automáticamente.

3.6 Método de estado

El método de estado es un patrón de diseño de comportamiento, permite que un objeto altere su comportamiento cuando cambia su estado interno.

3.7 Método de estrategia

El método de estrategia es un patrón de diseño de comportamiento, define una familia de algoritmos, encapsula cada uno de ellos, los hace intercambiables y permite al cliente elegir un algoritmo apropiado de una familia de algoritmos en tiempo de ejecución.

3.8 Método de plantilla

El método de plantilla es un patrón de diseño de comportamiento, define el esqueleto de un algoritmo en un método pero permite que las subclases alteren algunos pasos de ese algoritmo sin cambiar su estructura.

3.9 Método de visitante

El método de visitante es un patrón de diseño de comportamiento, se utiliza cuando tiene un conjunto de objetos estructurados y jerárquicos y desea realizar varias operaciones sobre estos objetos sin modificar sus clases.

3.10 Método de objeto nulo

El método de objeto nulo es un patrón de diseño de comportamiento, se utiliza para manejar la ausencia de un objeto válido proporcionando un objeto que no hace nada o proporciona un comportamiento predeterminado.

Otras referencias:

  • Pregunta de la entrevista sobre los 30 principales patrones de diseño de Java
  • Los 10 mejores libros de patrones de diseño de Java
  • Patrones de diseño: una habilidad imprescindible para los desarrolladores de software en 2019
  • Patrones de diseño: comprenda la importancia con ejemplos de la vida real
  • Patrones de diseño: Diseñe un sistema de reserva de entradas para el cine como Bookmyshow
  • Patrones de diseño: ¿Cómo diseñar un estacionamiento utilizando principios orientados a objetos?