Categorías de los patrones de diseño

Resumen

Los patrones de diseño se agrupan en tres categorías que organizan soluciones probadas para problemas recurrentes en el desarrollo de software. Si trabajas creando aplicaciones, entender esta clasificación te ayuda a elegir la herramienta correcta para cada situación y a escribir código más flexible, reutilizable y extensible.

La división nace de una idea sencilla: cada patrón resuelve un tipo distinto de problema. Algunos te ayudan a crear objetos, otros a combinarlos en estructuras más grandes, y otros a coordinar cómo se comunican entre sí. Vamos a desglosarlas.

¿Qué son los patrones creacionales y para qué sirven?

La primera categoría se llama justo como suena: creacionales. Su función es proveer mecanismos para la creación de objetos que favorecen la flexibilidad, la reusabilidad y la extensibilidad del código.

Aquí entran nombres que probablemente ya escuchaste. El builder, el factory method y el singleton son los más representativos. Junto al factory method existe toda una familia conocida como patrones fábrica, todos enfocados en la creación de objetos.

¿Qué hace un patrón creacional? Define cómo se instancian los objetos en tu sistema, separando la lógica de creación del resto del código para que puedas cambiarla sin romper lo demás.

¿Por qué importa? Porque crear objetos directamente con new en cualquier parte del código te ata a implementaciones específicas. Los patrones creacionales rompen esa dependencia.

¿Cómo funcionan los patrones estructurales?

La segunda categoría es la de los patrones estructurales, y su nombre también te da la pista. Su función es determinar cómo las clases y objetos se combinan o ensamblan para formar estructuras más grandes.

Algunos ejemplos clásicos:

  • El adapter, que conecta interfaces incompatibles.
  • El decorador, que añade comportamiento sin modificar la clase original.
  • El facade, que simplifica el acceso a un subsistema complejo.
  • El proxy, que controla el acceso a otro objeto.

La idea es esta: ya tienes tus clases creadas, ahora necesitas combinarlas para construir piezas más grandes. Los patrones estructurales te dicen cómo ensamblarlas sin que el resultado se vuelva un nudo imposible de mantener.

¿Para qué se usan los patrones de comportamiento?

La tercera categoría agrupa a los patrones de comportamiento. Y aquí, si te dejas guiar por el nombre, ya intuyes por dónde va.

Su función es tratar con procedimientos que se encargan de implementar una comunicación y asignación de responsabilidades efectiva entre objetos. Es decir, no se trata de crear ni de ensamblar, sino de coordinar.

Algunos ejemplos importantes son el command, el iterador, el observer y el strategy.

¿Qué resuelve un patrón de comportamiento? Resuelve cómo los objetos se hablan entre sí y cómo reparten responsabilidades, para que la comunicación sea clara y no se acople de más.

¿Qué relación tiene el patrón observer con Angular?

Pequeño paréntesis interesante. Si has trabajado con Angular, te sonará la palabra observable. Algunas ideas detrás de los observables están basadas en el patrón observer.

No quiere decir que Angular implemente el patrón al 100%, pero sí recoge varias de sus ideas sobre cómo debe darse el proceso de comunicación entre los elementos que utilizan observables, buscando que ocurra de la mejor forma posible.

Cómo se conectan las tres categorías en la práctica

La lógica detrás de la división es progresiva. Primero creas objetos con los patrones creacionales. Después los combinas en estructuras más grandes con los estructurales. Y finalmente coordinas cómo se comportan y se comunican entre ellos con los de comportamiento.

No son categorías excluyentes. En un mismo proyecto puedes tener un singleton creando una instancia única, un adapter conectándola con otra librería, y un observer notificando cambios a varios componentes. Trabajan juntos.

¿Ya conocías estas categorías? ¿Has trabajado con alguno de estos patrones? Si tienes uno favorito o una experiencia interesante usándolos, cuéntanos en los comentarios cuál y por qué.