Los patrones de diseño son soluciones habituales a problemas que aparecen durante el diseño de un producto software.
Un patrón no es una pieza de código, sino un concepto general para resolver un problema concreto. El patrón de diseño ayuda con ciertas instrucciones a implementar una solución que se adapte a las necesidades del programa que se esté creando..
Patrones y algoritmos
No se deben confundir los conceptos de algoritmo y patrón de diseño. El algoritmo es una receta para solucionar un problema muy concreto y el patrón de diseño es un plano arquitectónico para indicar cómo repartir las funciones, clases y objetos en nuestro programa.
Descripción de un patrón de diseño
La descripción de un patrón de diseño es un texto formal que permite la implementación del patrón en múltiples entornos y contextos.
Esta descripción del patrón incluye elementos como propósito, motivación, estructura de clases, aplicabilidad, pasos de implementación y ejemplo de código.
Clasificación
Los patrones de diseño se diferencian en su complejidad, nivel de detalle y escala de aplicabilidad.
Los patrones más básicos se denominan idioms y suelen aplicarse a un lenguaje de programación específico.
Los patrones más complejos y de alto nivel se denominan patrones de arquitectura y son aplicables a casi cualquier lenguaje de programación. Estos patrones ayudan al diseño global de la aplicación definiendo la arquitectura del proyecto software.
Clasificación por propósito
Los patrones de diseño se pueden clasificar también por el tipo de propósito que tenga el patrón de diseño.
Patrones de construcción
Estos patrones proporcionan mecanismos y enfoques para la creación de objetos buscando mejorar la reutilización de código y su flexibilidad.
Patrones de estructura
Estos patrones ofrecen soluciones para ensamblar y relacionar objetos para crear estructuras más grandes y maximizar su eficiencia y flexibilidad.
Patrones de comportamiento
Estos patrones ofrecen mecanismos para mejorar la comunicación entre objetos y definir las responsabilidades entre clases y objetos.