Estos patrones se enfocan en el proceso de creación de objetos, proporcionando mecanismos para crear objetos de manera que se adecuen a la situación dada. Ayudan a controlar la creación de instancias y simplifican el proceso de creación de objetos complejos.
- Singleton: Garantiza que una clase solo tenga una instancia y proporciona un punto de acceso global a ella. [Casos de uso | Ejemplos]
- Factory Method: Define una interfaz para crear un objeto, pero permite a las subclases decidir qué clase instanciar. [Casos de uso | Ejemplos]
- Abstract Factory: Proporciona una interfaz para crear familias de objetos relacionados o dependientes sin especificar sus clases concretas. [Casos de uso | Ejemplos]
- Builder: Separa la construcción de un objeto complejo de su representación, permitiendo construir diferentes tipos y representaciones. [Casos de uso | Ejemplos]
- Prototype: Permite crear nuevos objetos clonando una instancia existente. [Casos de uso | Ejemplos]
Estos patrones se centran en la composición de clases y objetos, ayudando a asegurar que cuando se combinen, las estructuras resultantes sean flexibles y eficientes. Facilitan el diseño de relaciones entre entidades para formar estructuras más grandes y manejables.
- Adapter: Permite que interfaces incompatibles trabajen juntas, convirtiendo la interfaz de una clase en otra esperada por los clientes. [Casos de uso | Ejemplos]
- Bridge: Desacopla una abstracción de su implementación, permitiendo que ambas varíen independientemente. [Casos de uso | Ejemplos]
- Composite: Permite tratar objetos individuales y composiciones de objetos de manera uniforme. [Casos de uso | Ejemplos]
- Decorator: Añade responsabilidades adicionales a un objeto de manera dinámica. [Casos de uso | Ejemplos]
- Facade: Proporciona una interfaz simplificada a un conjunto complejo de interfaces en un subsistema. [Casos de uso | Ejemplos]
- Flyweight: Reduce la cantidad de objetos creados para disminuir el uso de memoria y mejorar el rendimiento. [Casos de uso | Ejemplos]
- Proxy: Proporciona un sustituto o marcador de posición para otro objeto para controlar el acceso a él. [Casos de uso | Ejemplos]
Estos patrones se enfocan en la comunicación entre objetos y la asignación de responsabilidades. Mejoran la flexibilidad en la comunicación y la asignación de tareas entre objetos, definiendo cómo interactúan y cómo se distribuyen las responsabilidades.
- Chain of Responsibility: Permite pasar solicitudes a lo largo de una cadena de manejadores, donde cada manejador decide si procesar la solicitud o pasarla al siguiente manejador. [Casos de uso | Ejemplos]
- Command: Encapsula una solicitud como un objeto, permitiendo parametrizar a los clientes con diferentes solicitudes, colas o registros de solicitudes. [Casos de uso | Ejemplos]
- Interpreter: Define una representación para la gramática de un lenguaje y un intérprete que usa esa representación para interpretar frases del lenguaje. [Casos de uso | Ejemplos]
- Iterator: Proporciona una forma de acceder secuencialmente a los elementos de un objeto agregado sin exponer su representación subyacente. [Casos de uso | Ejemplos]
- Mediator: Define un objeto que encapsula cómo interactúan un conjunto de objetos, promoviendo el acoplamiento débil entre ellos. [Casos de uso | Ejemplos]
- Memento: Permite capturar y externalizar el estado interno de un objeto sin violar la encapsulación, para que el objeto pueda ser restaurado a este estado más tarde. [Casos de uso | Ejemplos]
- Observer: Define una dependencia de uno a muchos entre objetos, de modo que cuando uno cambia de estado, todos sus dependientes son notificados y actualizados automáticamente. [Casos de uso | Ejemplos]
- State: Permite a un objeto alterar su comportamiento cuando cambia su estado interno. [Casos de uso | Ejemplos]
- Strategy: Define una familia de algoritmos, encapsula cada uno, y los hace intercambiables. [Casos de uso | Ejemplos]
- Template Method: Define el esqueleto de un algoritmo en una operación, diferiendo algunos pasos a las subclases. [Casos de uso | Ejemplos]
- Visitor: Permite definir nuevas operaciones sin cambiar las clases de los elementos sobre los cuales opera. [Casos de uso | Ejemplos]