Los patrones de diseño son una solución común, elegante y probada para un problema especifico, son soluciones recurrentes al diseño de software.
Un patrón de diseño es el trabajo de una persona que ya se encontró con el problema anteriormente, intentó muchas soluciones posibles, y escogió y describió una de las mejores, los patrones evitan la continua busqueda de soluciones a problemas ya conocidos y ademas solucionados.
Algunos patrones de diseño son tan importantes que ya vienen incorporados en Java. Otros vienen incluidos en otros lenguajes, tal vez algunos nunca lleguen a estar incorporados a ningún lenguaje, pero continúan siendo útiles.
Los patrones de diseño pueden incrementar o disminuir la capacidad de comprensión de un diseño o de una implementación, disminuirla al añadir accesos indirectos o aumentar la cantidad de código.
Los patrones se clasifican en 3 grandes categorías basándose cada una en un propósito:
- Patrones creacionales: tratan con las formas de crear instancias de objetos. Nos ayudan a encapsular y abstraer dicha creación. Entre los patrones creacionales se encuentran: Patrón de Fábrica Abstracta, Patrón Constructor, Patrón del Método de Fabricación, Patrón Prototipo, Patrón de Instancia Única (Singleton).
- Patrones estructurales: describen como las clases y objetos pueden ser combinados para formar grandes estructuras y proporcionar nuevas funcionalidades. Solucionan problemas de composición (agregación) de clases y objetos. Entre los patrones estructurales se encuentran: Patrón Adaptador, Patrón Puente, Patrón Compuesto, Patrón Decorador, Patrón de Fachada, Patrón de Peso Mosca, Patrón Apoderado.
- Patrones de comportamiento: ayudan a definir la comunicación e iteración entre los objetos de un sistema. Reduce el acoplamiento entre los objetos. Entre los patrones de comportamiento se encuentran: Patrón de Cadena de Responsabilidad, Patrón de Comando, Patrón Intérprete, Patrón Iterador, Patrón Mediador, Patrón Memento, Patrón Observador, Patrón de Estado, Patrón de Estrategia, Patrón del Método Plantilla, Patrón Visitante.