Patrones de Diseño – Introducción

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

Un Patrón de Diseño es una solución a un problema de diseño en un contexto:

  • El contexto es escenario particular en el que el patrón puede ayudar.
  • El problema se refiere al objetivo que se pretende lograr en este contexto.
  • La solución facilita el logro del objetivo en el contexto.

Por ejemplo, para dibujar una cara (el problema) mirando al frente (el contexto) se puede aplicar un patrón al que podríamos llamar “Ovalo Particionado”.  Es fundamental asignar un nombre a un patrón de manera tal que sea posible nombrarlos durante el diseño del software sin entrar en los detalles de la solución propuesta por el patrón.

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

Un patrón de diseño no es:

  • Un artefacto ejecutable como una librería o un framework.
  • Un algoritmo
  • Una solución completa a un problema. Es más bien una estrategia que describe los componentes de una propuesta de solución y sus relaciones en términos generales.

Categorías de Patrones de Diseño

A continuación se mencionan algunas de las categorías o grupos de patrones más usuales; estas categorías están en permanente crecimiento y adecuación a medida que la experiencia de diseño en varios ámbitos se va sistematizando en un catálogos de patrones. Al final de este artículo hay algunas referencias a recursos que describen patrones en diversos ámbitos.

Patrones de creación

Estos patrones están orientados a la creación de objetos y apuntan separar la creación de objetos de manera tal que el cliente que los requiere no incluya los detalles de la creación de objetos.

  • Abstract Factory. Permite la creación de familias de objetos sin conocer las clases concretas.
  • Singleton. Permite asegurar la creación de un objeto y sólo un objeto de cierto tipo.

Patrones estructurales

Estos patrones están orientados a la composición de clases y objetos en estructuras más grandes.

  • Composite. Permite el tratamiento uniforme de colecciones de objetos u objetos individules.
  • Decorator. Encapsula un objeto y provee nueva funcionalidad.
  • Facade. Simplifica la interfaz para acceder a la funcionalidad de un conjunto de clases

Patrones de comportamiento

Estos patrones están orientados a distribuir las responsabilidades de la manera más adecuada al problema a resolver.

  • Command. Encapsula una solicitud como un objeto.
  • Observer. Notifica el cambio de estado a una colección de objetos
  • Strategy. Encapsula funcionalidad intercambiable y usa la delegación para decidir cuál emplear.
  • State. Encapsula funcionalidad basada en estados y usa la delegación para decidir el cambio entre funcionalidades.

Referencias

[1] Design Patterns: Elements of Reusable Object-Oriented Software

[2] Patterns of Enterprise Application Architecture

[3] Enterprise Integration Patterns: Designing, Building, and Deploying Messaging Solutions

[4] Service Design Patterns: Fundamental Design Solutions for SOAP/WSDL and RESTful Web Services

[5] Pattern-Oriented Software Architecture Volume 2: Patterns for Concurrent and Networked Objects

[6] Reactive Design Patterns

Leave a Reply