Estructurales
Cómo se componen clases y objetos en estructuras más grandes y flexibles.
Los patrones estructurales explican cómo ensamblar objetos y clases en estructuras mayores manteniendo flexibilidad y eficiencia. Resuelven problemas de composición: adaptar interfaces incompatibles, agregar comportamiento sin herencia, separar abstracción de implementación o representar jerarquías parte-todo.
#La idea
Mientras los creacionales se ocupan de quién construye y los de comportamiento de cómo dialogan, los estructurales responden a una pregunta más sencilla pero crucial: ¿cómo se conectan estos objetos entre sí sin terminar en un acoplamiento rígido?
#Cuándo encajan
- Tenés que integrar código viejo con una API moderna sin reescribir todo (
Adapter). - Querés agregar funcionalidad opcional sin explosión de subclases (
Decorator). - Manejás jerarquías recursivas (carpetas, árboles, menús) (
Composite). - Querés ocultar un subsistema complejo detrás de una API simple (
Facade). - Necesitás controlar el acceso a un objeto remoto, costoso o peligroso (
Proxy).
#Cuándo NO los uses
- Si la "incompatibilidad" la podés resolver renombrando un método, hacelo.
- Decorator mal aplicado deriva en pilas de wrappers imposibles de debuggear.
- Flyweight es una optimización: medí antes de aplicarlo.
#En este capítulo
Adapter, Bridge, Composite, Decorator, Facade, Flyweight y Proxy —
los siete clásicos del GoF, cada uno con su ejemplo en C# y los tradeoffs reales
que se ven en producción.
- Adapter — Permite que objetos con interfaces incompatibles colaboren.
- Bridge — Desacopla una abstracción de su implementación para que ambas evolucionen por separado.
- Composite — Compone objetos en estructuras de árbol y los trata uniformemente como si fueran individuales.
- Decorator — Añade responsabilidades a un objeto en runtime envolviéndolo en sucesivas capas.
- Facade — Provee una interfaz simplificada a un subsistema complejo.
- Flyweight — Comparte estado intrínseco entre muchos objetos para soportar grandes cantidades sin agotar memoria.
- Proxy — Sustituye a otro objeto para controlar el acceso a él (lazy load, seguridad, caching, remoting).