Durante este año de 2022, estuvimos repasando algunos patrones de diseño de software. Conocer los patrones de diseño es importante, pues son soluciones típicas a problemas comunes en el diseño de software.

Los patrones de diseño son modelos prefabricados que puedes personalizar para resolver un problema de diseño recurrente en tu código. Sin embargo, el patrón es un concepto general, no es cómo una función o biblioteca que puedes encontrar en la web y copiarlas en tu software.

En el artículo de hoy repasaremos doce de los patrones de diseño de software que vimos durante el año 2022.

1. Método fábrica

El patrón “Método fábrica” es una interfaz que sirve para crear objetos en una superclase. Las subclases pueden alterar el tipo de objetos que se crearán. La idea de este patrón es que una clase delegue en sus subclases la creación de objetos.

Por tanto, el método fábrica es un patrón que te puede ayudar a resolver problemas en aplicaciones de gestión logística, o en aplicaciones que conectan con diferentes redes sociales.

2. Fábrica Abstracta

Fábrica Abstracta es un patrón que propone declarar explícitamente las interfaces para cada producto distinto de una familia de productos.

Es un patrón de diseño creacional que te permite producir familias de objetos relacionados sin especificar sus clases concretas. Una aplicación para este patrón sería un simulador de tienda de muebles.

Podrías usar “Fábrica Abstracta” cuando necesites que tu código funcione con varias familias de productos relacionados, pero no quieres que dependa de clases concretas de esos productos, y deseas permitir la extensibilidad futura.

3. Constructor

El patrón Constructor resuelve el problema en el que se require una inicialización laboriosa y paso a paso de muchos campos y objetos anidados.  

Es un patrón de diseño creacional que permite producir diferentes tipos y representaciones de un objeto utilizando el mismo código de construcción. Si estás “desarrollando” casas o edificios, este es uno de tus patrones preferidos, si no quieres que tu constructor se vuelva monstruoso.

4. Prototipo

El patrón Prototipo, también conocido como Clon, es un patrón de diseño creacional que te permite copiar objetos existentes sin hacer que tu código dependa de sus clases.

Este patrón delega el proceso de clonación a los objetos reales que se están clonando, declarando una interfaz común para todos los objetos que admiten clonación. Un objeto que admite la clonación se llama prototipo.

Podrías usar el patrón Prototipo si tu código no debe depender de las clases concretas de objetos que necesitas copiar.

5. Instancia Única

El patrón de diseño de software Instancia Única, o Singleton, es un patrón de diseño creacional que te permite asegurar de que una clase tenga solo una instancia.

Podrías usar este patrón cuando una clase de tu programa debe tener una única instancia para todos los clientes, por ejemplo si desarrollas software para el Gobierno. También podrías usar el patrón Instancia Única si necesitas un control más estricto sobre las variables globales.

6. Adaptador

El patrón adaptador es un patrón de diseño estructural que permite la colaboración de objetos con interfaces incompatibles.

Este patrón resuelve los problemas relacionados con las APIs y aplicaciones de terceros. Un ejemplo sería una aplicación que descarga datos de diferentes fuentes en diferentes formatos y necesites un adaptador, un objeto especial que convierte la interfaz de un objeto para que otro objeto pueda entenderlo.

Si quieres usar alguna clase existente pero su interfaz no es compatible con el resto de tu código, el Adaptador puede ser tu patrón.

7. Puente

Puente es un patrón de diseño estructural que te permite dividir una clase grande o un conjunto de clases estrechamente relacionadas en dos jerarquías separadas (abstracción e implementación), que se pueden desarrollar de forma independiente.

Este patrón intenta resolver problemas relacionados con la herencia y la composición de objetos.

Podrías usar el patrón Puente cuando quieras dividir y organizar una clase monolítica que tenga varias variantes de alguna funcionalidad.

8. Objeto Compuesto

El patrón Objeto Compuesto, o Árbol de objetos, es un patrón de diseño estructural que te permite componer objetos en estructuras de árbol. Si el modelo central de tu aplicación se puede representar como un árbol puede ser una buena idea usar el patrón objeto compuesto. Puedes trabajar con estas estructuras como si fueran objetos individuales.

9. Decorador

El patrón Decorador es un patrón de diseño estructural que te permite adjuntar nuevos comportamientos a los objetos colocando estos objetos dentro de objetos envolventes especiales que contiene los comportamientos.

Podrías usar este patrón si tu aplicación necesita necesita una biblioteca de notificaciones. Esta biblioteca permite que otros programas notifiquen a sus usuarios sobre eventos diversos mediante email, SMS, o incluso Facebook. Cada uno con su comportamiento adicional.

El patrón Decorador te permite estructurar la lógica de negocio en capas, crear un decorador para cada capa y componer objetos con varias combinaciones de esta lógica en tiempo de ejecución.

10. Fachada

El patrón Fachada es un patrón de diseño estructural que proporciona una interfaz simplificada para una biblioteca, u otro conjunto complejo de clases.

También es un patrón recomendable para resolver problemas relacionados con la integración con bibliotecas de terceros.

Por ejemplo, si necesitas simplificar el mantenimiento de una aplicación que funcione con un conjunto de objetos que pertenecen a un framework sofisticado y necesitas inicializar todos esos objetos, realizar un seguimiento de las dependencias, ejecutar métodos en el orden correcto, etc.

11. Peso mosca

El patrón Peso Mosca, es una optimización, y es un patrón de diseño que te permite colocar más objetos en la cantidad de RAM disponible al compartir partes comunes del estado entre varios objetos en lugar de mantener todos los datos en cada objeto.

Este patrón es muy poco popular en PHP. Se usa muy raramente en aplicaciones PHP debido a la naturaleza del lenguaje.

12. Proxy

El Patrón Proxy es un patrón de diseño estructural que te permite proporcionar un sustituto para otro objeto. Un proxy controla el acceso al objeto original. Con esto, puedes hacer algo antes o después de que la solicitud llegue al objeto original.

Podrías usar el método proxy en diferentes casos, como por ejemplo, la inicialización diferida, el control de accesos, la ejecución local de un servicio remoto o en el almacenamiento en caché de los resultados de la solicitud.

Conclusión

Para acabar, los patrones de diseño de software, como herramientas de soluciones a problemas comunes, definen un lenguaje común que te ayuda a ti y a tu equipo a comunicarse de manera más eficiente.

Es posible trabajar como programador sin conocer un solo patrón, pero conocerlos es útil porque te enseñan cómo resolver todo el tipo de problemas utilizando los principios del diseño orientado a objetos.

¿Qué patrones de diseño de software utilizas en tus proyectos? ¡Coméntalo abajo!

¡Feliz Año 2023!

Compartir es construir