⚡ Patrones de Comportamiento
Los patrones de comportamiento se centran en la comunicación entre objetos y la asignación de responsabilidades, definiendo cómo los objetos interactúan y distribuyen el trabajo.
📊 Resumen de Patrones
Patrón | Propósito | Caso de Uso Principal |
---|---|---|
Observer | Notificar cambios a múltiples objetos | Eventos, notificaciones |
Strategy | Intercambiar algoritmos dinámicamente | Pricing, payment processing |
Command | Encapsular operaciones como objetos | Undo/Redo, queues |
State | Cambiar comportamiento según estado | State machines |
Template Method | Esqueleto de algoritmo | Frameworks, pipelines |
Chain of Responsibility | Cadena de handlers | Middleware, validaciones |
Mediator | Centralizar comunicación | UI components, workflows |
Memento | Capturar y restaurar estado | Snapshots, checkpoints |
Iterator | Recorrido secuencial | Navegación de colecciones |
Visitor | Operaciones sobre jerarquías | AST processing |
Interpreter | Interpretar expresiones | Parsers, reglas de negocio |
📝 Patrones Disponibles
Observer
Problema: Notificar automáticamente a múltiples objetos cuando cambia el estado de otro objeto.
Solución: Define una dependencia uno-a-muchos entre objetos para que los dependientes sean notificados automáticamente.
Casos de uso: Eventos de dominio, notificaciones, UI reactiva, pub/sub
Strategy
Problema: Necesitas intercambiar algoritmos dinámicamente según el contexto.
Solución: Encapsula algoritmos en clases separadas y los hace intercambiables.
Casos de uso: Pricing, shipping, payment processing, algoritmos de ordenamiento
Command
Problema: Encapsular operaciones como objetos para poder almacenarlas, ejecutarlas más tarde o deshacerlas.
Solución: Convierte requests en objetos que contienen toda la información necesaria.
Casos de uso: Undo/Redo, queues, logging de operaciones, macros
State
Problema: Un objeto debe cambiar su comportamiento cuando su estado interno cambia.
Solución: Encapsula estados en clases separadas y delega el comportamiento al estado actual.
Casos de uso: State machines, workflows, estados de conexión
Template Method
Problema: Definir el esqueleto de un algoritmo pero permitir que subclases redefinan ciertos pasos.
Solución: Define la estructura del algoritmo en una clase base con métodos abstractos para los pasos variables.
Casos de uso: Frameworks, pipelines de procesamiento, algoritmos con variaciones
Chain of Responsibility
Problema: Pasar requests a través de una cadena de handlers hasta que uno lo procese.
Solución: Encadena objetos receptores y pasa el request a lo largo de la cadena.
Casos de uso: Middleware, validaciones, autorización, filtros
Mediator
Problema: Reducir las dependencias caóticas entre objetos que se comunican directamente.
Solución: Centraliza la comunicación compleja entre objetos en un mediador.
Casos de uso: UI components, chat systems, workflows, coordinación de servicios
Memento
Problema: Capturar y restaurar el estado interno de un objeto sin violar su encapsulación.
Solución: Externaliza el estado en un objeto memento que puede restaurarse posteriormente.
Casos de uso: Undo/Redo, snapshots, checkpoints, versionado de estado
Iterator
Problema: Acceder secuencialmente a elementos de una colección sin exponer su representación interna.
Solución: Proporciona una interfaz uniforme para recorrer diferentes tipos de colecciones.
Casos de uso: Recorrido de estructuras, paginación, navegación de datos
Visitor
Problema: Agregar nuevas operaciones a una jerarquía de clases sin modificar las clases existentes.
Solución: Separa algoritmos de los objetos sobre los que operan usando double dispatch.
Casos de uso: AST processing, reporting, transformaciones, compiladores
Interpreter
Problema: Interpretar y evaluar expresiones en un lenguaje o gramática específica.
Solución: Define una representación para la gramática y un intérprete que evalúa expresiones.
Casos de uso: Parsers, calculadoras, reglas de negocio, DSLs
🎯 Guía de Selección
Patrón | Cuándo usar | Evitar cuando |
---|---|---|
Observer | Notificaciones 1-a-muchos | Comunicación directa suficiente |
Strategy | Múltiples algoritmos | Un solo algoritmo |
Command | Operaciones como objetos | Operaciones simples |
State | Comportamiento según estado | Estados simples |
Template Method | Algoritmos con pasos variables | Algoritmos completamente diferentes |
Chain of Responsibility | Múltiples handlers posibles | Un solo handler |
Mediator | Comunicación compleja entre objetos | Comunicación simple |
Memento | Necesitas undo/redo | Estados simples |
Iterator | Recorrido de colecciones | Acceso directo suficiente |
Visitor | Operaciones sobre jerarquías | Jerarquías estables |
Interpreter | Lenguajes o expresiones complejas | Lógica simple |
📚 Navegación
← Volver a Patrones de Diseño | ← Volver al inicio |