Los patrones de diseño son soluciones a problemas comunes en el desarrollo de software que nos encontramos en el desarrollo de aplicaciones del mundo real.
Para que una solución sea considerada un patrón debe poseer ciertas características. Una de ellas es que debe haber comprobado su efectividad resolviendo problemas similares en ocasiones anteriores. Otra es que debe ser reusable, lo que significa que es aplicable a diferentes problemas de diseño en distintas circunstancias.
Los patrones de diseño tuvieron un gran éxito en el mundo de la informática a partir de la publicación del libro Design Patterns escrito por el grupo Gang of Four (GoF) compuesto por Erich Gamma, Richard Helm, Ralph Johnson y John Vlisides, en el que se recogían 23 patrones de diseño comunes.
Ellos, clasificaban los patrones de diseño en tres grupos: Creacionales, Estructurales y de Comportamiento.
PATRONES CREACIONALES
Abstract Factory (Fábrica abstracta): Crea una instancia de varias familias de clases.
Builder (Constructor virtual): Separa la construcción de objetos de su representación.
Factory Method (Método de fabricación): Crea una instancia de varias clases derivadas.
Prototype (Prototipo): Crea nuevos objetos clonándolos de una instancia ya existente.
Singleton (Instancia única): Una clase de las que sólo una sola instancia puede existir.
PATRONES ESTRUCTURALES
Adapter (Adaptador): Adapta una interfaz para que pueda ser utilizada por una clase que de otro modo no podría utilizarla.
Bridge (Puente): Desacopla una abstracción de su implementación.
Composite (Objeto compuesto): Una estructura de árbol de objetos simples y compuestos.
Decorator (Envoltorio): Añade funcionalidad a una clase dinámicamente.
Facade (Fachada): Una clase única que representa un subsistema.
Flyweight (Peso ligero): Reduce la redundancia cuando gran cantidad de objetos poseen idéntica información.
Proxy: Tiene un objeto que representa a otro objeto.
PATRONES DE COMPORTAMIENTO
Chain of Responsibility (Cadena de responsabilidad): Permite establecer la línea que deben llevar los mensajes para que los objetos realicen la tarea indicada.
Command (Orden): Encapsular un comando de la petición como un objeto.
Interpreter (Intérprete): Una manera de introducir los elementos de un lenguaje a un programa.
Iterator (Iterador): Permite realizar recorridos sobre objetos compuestos independientemente de la implementación de estos.
Mediator (Mediador): Define un objeto que coordine la comunicación entre objetos de distintas clases, pero que funcionan como un conjunto.
Memento (Recuerdo): Permite volver a estados anteriores del sistema.
Observer (Observador): Una forma de notificar el cambio a una serie de clases.
State (Estado): Alterar el comportamiento de un objeto cuando su estado cambia.
Strategy (Estrategia): Permite disponer de varios métodos para resolver un problema y elegir cuál utilizar en tiempo de ejecución.
Template Method (Método plantilla): Aplazar los pasos exactos de un algoritmo para una subclase.
Visitor (Visitante): Define una nueva operación a una clase sin cambios.
------------------------
Los ejemplos explicados a continuación no los apliqué a mi proyecto, pero si mencioné ejemplos.
EJEMPLOS DE PATRONES:
------------------------
Fuentes:
...