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