Patrones de diseño - 1. Definición

image.png

En esta serie de artículos voy a intentar definir de la forma más sencilla y accesible posible los distintos patrones de diseño de los que dispone un programador para construir su código.

Al ser este el primero de los episodios, me extenderé un poco más para definir qué entendemos por patrones de diseño y algunos conceptos asociados que necesitarás para comprender mejor los mismos.

¿Qué es un patrón de diseño?

Por patrón de diseño entendemos al conjunto de soluciones que responden a problemas que suceden de forma recurrente en el diseño de software. Son como plantillas prefabricadas que puedes customizar para resolver este tipo de problemas recurrentes.

No se trata, por tanto, de buscar aquel patrón que más te interesa y copiarlo en tu código de la misma forma que importarías librerias o funciones. En este caso, los patrones no son una pieza específica de código, sino más bien un concepto general que nos facilita la resolución de un problema común a la hora de programar.

A partir de la elección del patrón de diseño será tarea tuya la de adaptarlo a las necesidades específicas del problema que buscas resolver.

image.png

Los patrones son frecuentemente confundidos con algoritmos, dado que ambos conceptos describen soluciones a algunos problemas conocidos. No obstante, mientras un algoritmo siempre define un conjunto claro de acciones para alcanzar un objetivo, un patrón es una descripción de un nivel de abstracción superior.

A modo de ejemplo, un algoritmo podría verse como una receta de cocina: siempre los mismos pasos para alcanzar el mismo resultado. En cambio, el patrón de diseño es como los planos de una casa: podemos ver los resultados esperados y las características que buscamos, pero el orden de implementación es cosa tuya.

¿En qué consiste un patrón?

La mayoría de los patrones son descritos formalmente para facilitar su reproducción en múltiples contextos.

Generalmente, los patrones son representados siguiendo unas determinadas secciones:

  • Intent: (Intención). En donde brevement se describe tanto el problema como la solución
  • Motivation (Motivación). Una explicación más en profunidad del problema y de la solución que proporciona el patrón.
  • Structure (Estructura). Muestra la estructura de las distintas clases dentro del patrón y sus relaciones.
  • Code example (Ejemplo de código). Se suele presentar en alguno de los lenguajes de programación más populares para facilitar la comprensión del patrón.

En esta serie de episodios dedicados al diseño os iré desarrollando los patrones de diseño más importantes, ya sea por su uso actual o por su impacto histórico y veremos múltiples ejemplos de implementación para entenderlos mejor.