Están organizados en tres categorías principales según el libro "Design Patterns: Elements of Reusable Object-Oriented Software" (Gang of Four, GoF). A continuación, los patrones más usados dentro de cada categoría y algunos otros populares adicionales:
1. Creacionales
Estos patrones abordan la creación de objetos, asegurando que el sistema sea independiente de cómo se crean, componen y representan.
- 
Singleton - Garantiza que una clase tenga una única instancia y proporciona un punto de acceso global a ella.
 
- 
Factory Method - Define una interfaz para crear objetos, pero permite que las subclases decidan cuál clase instanciar.
 
- 
Abstract Factory - Proporciona una interfaz para crear familias de objetos relacionados o dependientes sin especificar sus clases concretas.
 
- 
Builder - Separa la construcción de un objeto complejo de su representación, permitiendo que el mismo proceso de construcción cree diferentes representaciones.
 
- 
Prototype - Permite clonar objetos existentes en lugar de crearlos desde cero, evitando el costo de inicialización compleja.
 
2. Estructurales
Estos patrones se ocupan de cómo componer clases y objetos para formar estructuras más grandes.
- 
Adapter - Permite que clases con interfaces incompatibles trabajen juntas mediante un "adaptador".
 
- 
Decorator - Añade funcionalidad adicional a un objeto de forma dinámica.
 
- 
Proxy - Proporciona un sustituto o marcador de posición para controlar el acceso a un objeto.
 
- 
Composite - Compone objetos en estructuras de árbol para representar jerarquías parte-todo, permitiendo que los clientes traten objetos individuales y compuestos de manera uniforme.
 
- 
Bridge - Desacopla una abstracción de su implementación para que ambas puedan variar de manera independiente.
 
- 
Facade - Proporciona una interfaz simplificada a un conjunto de interfaces en un subsistema.
 
- 
Flyweight - Reduce el costo de creación de objetos, reutilizando instancias existentes cuando es posible.
 
3. Comportamentales
Estos patrones se centran en la interacción y la responsabilidad entre objetos.
- 
Strategy - Define una familia de algoritmos, encapsula cada uno y los hace intercambiables.
 
- 
Observer - Permite que un objeto notifique a múltiples objetos interesados cuando cambia su estado.
 
- 
Command - Encapsula una solicitud como un objeto, permitiendo parametrizar clientes con diferentes solicitudes, hacer colas o registros de comandos, y soportar deshacer/rehacer.
 
- 
State - Permite que un objeto cambie su comportamiento cuando cambia su estado interno.
 
- 
Template Method - Define el esqueleto de un algoritmo en una operación, permitiendo que las subclases redefinan ciertos pasos sin cambiar la estructura general.
 
- 
Mediator - Descentraliza la comunicación entre objetos mediante un mediador.
 
- 
Chain of Responsibility - Permite que varios objetos manejen una solicitud, pasando la solicitud a lo largo de una cadena.
 
- 
Iterator - Proporciona una manera de acceder a los elementos de un objeto compuesto de forma secuencial sin exponer su representación subyacente.
 
- 
Visitor - Permite agregar nuevas operaciones a estructuras de objetos sin modificar sus clases.
 
- 
Memento - Captura y externaliza el estado interno de un objeto para poder restaurarlo más tarde.
 
Patrones Adicionales y Modernos
Además de los patrones clásicos de GoF, algunos patrones más modernos son ampliamente usados en el desarrollo de software:
- 
Dependency Injection (DI) - Permite inyectar dependencias en lugar de que un objeto las cree por sí mismo.
 
- 
Model-View-Controller (MVC) - Desglosa una aplicación en tres componentes principales: modelo, vista y controlador.
 
- 
Repository - Abstrae la lógica para acceder a datos de una base de datos o fuente externa.
 
- 
Unit of Work - Mantiene un registro de los cambios realizados a los datos para coordinar actualizaciones atómicas.
 
- 
Event Sourcing - Representa el estado de una entidad como una secuencia de eventos en lugar de un único estado.
 
- 
CQRS (Command Query Responsibility Segregation) - Separa las operaciones de lectura (query) de las operaciones de escritura (command) en diferentes modelos.
 
Estos patrones forman la base de muchas soluciones de software modernas y se eligen según las necesidades del problema y el contexto de la aplicación.
