Skip to main content

Inicia sesión en CleanKata

Sigue tu progreso, gana XP y desbloquea todas las lecciones.

Al iniciar sesión aceptas nuestros Términos de uso y Política de privacidad.

Patrones de Diseño80 XP8 min

Flyweight: Compartir para Ahorrar Memoria

Cabe más objetos en RAM compartiendo estado común — separa datos intrínsecos (compartidos) de extrínsecos (únicos) para evitar duplicar objetos pesados.

Por qué importa

Cuando un juego necesita renderizar 10 000 árboles, cada uno con una textura de 1 MB, almacenar la textura en cada objeto consume 10 GB ingenuamente. La mayor parte de esos datos es idéntica. Flyweight divide el estado del objeto en dos partes: intrínseca (compartida, inmutable — el tipo de árbol, textura, color) y extrínseca (única — las coordenadas x/y). Una fábrica cachea un TreeType por especie; cada instancia Tree almacena solo una referencia a él más su propia posición.

Estado intrínseco vs extrínseco

El estado intrínseco debe ser inmutable — si los objetos compartidos pudieran mutarse, un árbol que cambia su textura afectaría a todos los árboles de esa especie. En Python, un dataclass con frozen=True o @lru_cache aplica esto. En TypeScript, los campos readonly y una fábrica que devuelve desde una caché Map logran lo mismo. El interning de strings en lenguajes como Java es Flyweight aplicado automáticamente a los literales de cadena.

💡Conclusión clave

Flyweight vale la pena cuando tienes miles de objetos que comparten la mayor parte de su estado — separa la parte compartida en un objeto en caché en lugar de duplicarla.

🔧 Algunos ejercicios pueden tener errores. Si algo parece incorrecto, usa el botón Feedback (abajo a la derecha) para reportarlo — nos ayuda a corregirlo rápido.

Pista: Flyweight vale la pena cuando tienes miles de objetos que comparten la mayor parte de su estado — separa la parte compartida en un objeto en caché en lugar de duplicarla.

✗ Tu versión