# Patrón de diseño

> Una solución con nombre y reutilizable para un problema de diseño que se repite.

- Nivel: Avanzado
- Temas: Software
- URL: https://tidbit.legios.com.ar/es/design-pattern/
- En inglés: [Design pattern](https://tidbit.legios.com.ar/design-pattern/)

Un **patrón de diseño** es una forma probada de estructurar código para un problema que se repite, descripta en términos generales para que la adaptes a tu propio programa. No es una librería que instalás ni código que pegás: es una forma, con un nombre, una situación típica en la que ayuda y sus contras. La idea se tomó de la arquitectura y se popularizó en 1994 con el libro Design Patterns, cuyos cuatro autores son conocidos como la **Gang of Four** (la "banda de los cuatro"). Ese libro catalogó 23 patrones para programación orientada a objetos.

Algunos ejemplos. El **patrón observer** permite que un objeto avise a muchos otros cuando algo cambia, sin saber quiénes son: está detrás de cada "suscribirse" y de cada listener de eventos, desde una planilla que actualiza sus gráficos hasta una interfaz que reacciona a un clic. El patrón strategy cambia un algoritmo por otro detrás de la misma interfaz, como elegir entre distintas formas de calcular un envío. El adapter envuelve un componente con una interfaz incompatible para que encaje, como un adaptador de enchufe de viaje. El factory centraliza cómo se crean los objetos, y el singleton garantiza que haya una sola instancia de algo.

Su mayor valor es el vocabulario compartido. Decir "poné un adapter delante de la API vieja de pagos" transmite un diseño entero en pocas palabras durante un code review. Los patrones además van más allá de las clases: los reintentos con espera creciente, los circuit breakers, publicar y suscribirse, y los muchos patrones de microservicios y de arquitectura en la nube siguen la misma idea. El riesgo es el contrario: forzar patrones donde alcanzaba con una función simple agrega capas que nadie necesita. Un patrón que trae problemas una y otra vez se llama **antipatrón**.

## Una analogía

Un libro de cocina de técnicas, no de platos: cómo hacer una salsa blanca, cómo emulsionar un aderezo. Cada cocinero las adapta a su plato, y decir "arrancá con una salsa blanca" le dice a otro cocinero exactamente qué querés decir.

## Para quedarse

- Un patrón de diseño es una solución general y con nombre para un problema de diseño que se repite.
- El libro de la Gang of Four, de 1994, catalogó 23 patrones clásicos orientados a objetos.
- Su valor principal es un vocabulario compartido para hablar de diseño.
- Abusar de los patrones agrega complejidad innecesaria; algunos hábitos son antipatrones.

## Para seguir leyendo

- [Patrón de diseño en Wikipedia](https://es.wikipedia.org/wiki/Patrón_de_diseño)
- [Catálogo de patrones de diseño (Refactoring.Guru)](https://refactoring.guru/es/design-patterns)

## Términos relacionados

- [Programación orientada a objetos](https://tidbit.legios.com.ar/es/object-oriented-programming/): Organizar el código en objetos que juntan datos con las acciones que los usan.
- [Planilla vs base de datos](https://tidbit.legios.com.ar/es/spreadsheet-vs-database/): Por qué una empresa que vive en Excel termina necesitando una base de datos de verdad.
- [Algoritmo](https://tidbit.legios.com.ar/es/algorithm/): Un método preciso, paso a paso, para resolver un problema o hacer una tarea.
- [API](https://tidbit.legios.com.ar/es/api/): El menú de cosas que un programa le deja pedir a otro programa.
- [Revisión de código](https://tidbit.legios.com.ar/es/code-review/): Que otra persona lea un cambio de código antes de que pase a ser parte del producto.
- [Microservicios](https://tidbit.legios.com.ar/es/microservices/): Construir una aplicación como muchos servicios chicos que hacen una sola cosa cada uno.
- [Computación en la nube](https://tidbit.legios.com.ar/es/cloud-computing/): Alquilar computadoras por internet en vez de comprar las tuyas.
