El patrón Flyweight es un patrón estructural que busca minimizar el uso de memoria compartiendo tantos datos como sea posible entre los objetos que tienen estados similares o idénticos. Este patrón es ideal cuando necesitas manejar un gran número de objetos que comparten información común, pero también tienen datos únicos.
-
Un Adapter actúa como un traductor entre dos clases o sistemas con interfaces distintas.
-
Se puede utilizar cuando quieres que una clase existente funcione con otras clases sin modificar su código.
-
Estado Intrínseco:
- Datos compartidos entre múltiples objetos, que son inmutables y no cambian.
- Almacenados en el Flyweight.
-
Estado Extrínseco:
- Datos específicos de cada objeto, que pueden cambiar.
- Pasados desde el cliente al Flyweight cuando se realiza una operación.
-
Factory:
- Responsable de administrar y reutilizar instancias de Flyweight. Evita crear múltiples objetos idénticos.
Imagina que estamos desarrollando un juego donde se representan árboles en un bosque. Cada árbol tiene un tipo (estado intrínseco) y una posición (estado extrínseco).
Aquí usamos el patrón Flyweight para minimizar el uso de memoria cuando hay muchos árboles del mismo tipo.
-
TipoArbolFactory:
- Se asegura de que cada combinación única de ArbolTipo se cree solo una vez.
- Si ya existe un ArbolTipo con el mismo nombre, color, y textura, lo reutiliza.
-
Arbol:
- Contiene la posición específica (estado extrínseco) y una referencia a un ArbolTipo (estado intrínseco).
-
Memoria Optimizada
- Aunque hay múltiples árboles (Arbol), los datos compartidos (ArbolTipo) se almacenan solo una vez
Codigo Flyweight