🔧 Patrones Estructurales
Los patrones estructurales se ocupan de cómo se componen las clases y objetos para formar estructuras más grandes y flexibles.
📊 Resumen de Patrones
Patrón | Propósito | Caso de Uso Principal |
---|---|---|
Adapter | Hacer compatibles interfaces | Integración con APIs legacy |
Bridge | Separar abstracción de implementación | Drivers multiplataforma |
Composite | Tratar objetos y grupos uniformemente | Árboles de archivos |
Decorator | Añadir funcionalidad dinámicamente | Middleware, validadores |
Facade | Simplificar interfaces complejas | APIs unificadas |
Flyweight | Minimizar uso de memoria | Editores de texto |
Proxy | Controlar acceso a objetos | Lazy loading, cache |
📝 Patrones Disponibles
Adapter
Problema: Hacer que dos interfaces incompatibles trabajen juntas.
Solución: Crea una clase intermedia que traduce las llamadas entre interfaces.
Casos de uso: Integración con APIs legacy, bibliotecas de terceros, sistemas externos
Bridge
Problema: Separar una abstracción de su implementación para que ambas puedan variar independientemente.
Solución: Usa composición en lugar de herencia para conectar abstracción e implementación.
Casos de uso: Drivers de base de datos, sistemas multiplataforma, interfaces gráficas
Composite
Problema: Tratar objetos individuales y composiciones de objetos de manera uniforme.
Solución: Organiza objetos en estructuras de árbol donde hojas y nodos implementan la misma interfaz.
Casos de uso: Árboles de archivos, menús anidados, estructuras organizacionales
Decorator
Problema: Añadir funcionalidad a objetos dinámicamente sin alterar su estructura.
Solución: Envuelve objetos en decoradores que añaden comportamiento adicional.
Casos de uso: Middleware, validadores, loggers, filtros de procesamiento
Facade
Problema: Simplificar el acceso a un subsistema complejo.
Solución: Proporciona una interfaz unificada y simple para un conjunto de interfaces complejas.
Casos de uso: APIs unificadas, servicios de alto nivel, wrappers de bibliotecas
Flyweight
Problema: Minimizar el uso de memoria cuando se necesitan muchos objetos similares.
Solución: Comparte eficientemente datos comunes entre múltiples objetos similares.
Casos de uso: Editores de texto, juegos con partículas, sistemas de renderizado
Proxy
Problema: Controlar el acceso a otro objeto proporcionando un sustituto.
Solución: Crea un objeto proxy que controla el acceso al objeto real.
Casos de uso: Lazy loading, cache, seguridad, logging de accesos
🎯 Guía de Selección
Patrón | Cuándo usar | Evitar cuando |
---|---|---|
Adapter | Integrar sistemas incompatibles | Interfaces ya compatibles |
Bridge | Abstracción e implementación independientes | Abstracción simple |
Composite | Estructuras jerárquicas | Estructuras planas |
Decorator | Agregar funcionalidad dinámicamente | Funcionalidad estática |
Facade | Simplificar subsistemas complejos | Sistemas ya simples |
Flyweight | Muchos objetos similares | Pocos objetos |
Proxy | Control de acceso/lazy loading | Acceso directo suficiente |
📚 Navegación
← Volver a Patrones de Diseño | ← Volver al inicio |