Familia Estructural¶
Los patrones estructurales se ocupan de cómo las clases y objetos se componen para formar estructuras más grandes, manteniendo flexibilidad y eficiencia. Estos patrones facilitan crear relaciones entre entidades de forma que permitan obtener nuevas funcionalidades.
Patrones en Esta Familia¶
| Patrón | Propósito | Uso Principal |
|---|---|---|
| Adapter | Compatibilidad entre interfaces incompatibles | Integración de código legacy |
| Bridge | Desacoplar abstracción de implementación | Múltiples dimensiones de variación |
| Composite | Componer objetos en estructuras de árbol | Estructuras jerárquicas |
| Decorator | Agregar responsabilidades dinámicamente | Comportamiento dinámico sin subclases |
| Facade | Proporcionar interfaz unificada simplificada | Simplificar sistemas complejos |
| Flyweight | Compartir objetos para ahorrar memoria | Optimizar memoria con muchos objetos |
| Proxy | Control de acceso a otro objeto | Autorización, lazy loading, logging |
Cuándo Usarlos¶
Adapter: Integrar código legacy con código nuevo
Dos interfaces incompatibles necesitan trabajar juntas
Querés reutilizar clases existentes sin modificarlas
Bridge: Múltiples dimensiones de variación independientes
Necesitás evitar explosión de subclases (N × M combinaciones)
Abstracciones e implementaciones varían independientemente
Composite: Estructuras jerárquicas (árboles, menús, archivos)
Necesitás tratar uniformemente hojas y compuestos
Hace falta recursión sobre estructuras arbitrariamente profundas
Decorator: Comportamiento dinámico sin crear subclases
Necesitás agregar funcionalidad en tiempo de ejecución
Herencia sería explosiva (múltiples combinaciones de características)
Facade: Simplificar sistemas complejos
Subsistema tiene múltiples componentes acoplados
Querés proporcionar punto de entrada único y simple
Flyweight: Optimizar memoria con muchos objetos similares
Millones de objetos consumirían mucha memoria
Podés separar estado compartible del estado particular
Proxy: Controlar acceso, lazy loading, auditoría
Necesitás interceder en acceso a objeto real
Objeto es costoso (remoto, BD, archivo grande)
Hace falta autorización, caché o logging
Decisión Rápida¶
¿Dos interfaces incompatibles? → Adapter
¿Múltiples dimensiones de variación? → Bridge
¿Estructura jerárquica (árbol)? → Composite
¿Agregar responsabilidades dinámicamente? → Decorator
¿Simplificar acceso a subsistema? → Facade
¿Muchos objetos idénticos (memoria)? → Flyweight
¿Controlar acceso a objeto? → Proxy
Práctica integradora¶
Después de recorrer los patrones individuales, conviene resolver los ejercicios integradores de estructurales.