Introducción: Compartir para ahorrar
Flyweight reduce el consumo de memoria compartiendo objetos que tienen el mismo estado intrínseco.
Prompt: Repeating pattern of identical leaves, minimal style, symmetric arrangement.
1. Naturaleza: Hojas idénticas
En un bosque hay miles de hojas casi iguales. No necesitas crear una definición distinta por hoja; reutilizas una plantilla.
Prompt: Many identical leaves on a branch, macro view, soft light.
2. Mundo Real: Texto y fuentes
En un documento, cada letra "A" comparte la misma forma (estado intrínseco). Solo cambia la posición (estado extrínseco).
Prompt: Typography grid showing repeated glyphs, modern editorial style.
3. Implementación en C#: Código Paso a Paso
3.1 Flyweight
public class ArbolFlyweight
{
public string Tipo { get; }
public string Color { get; }
public string Textura { get; }
public ArbolFlyweight(string tipo, string color, string textura)
{ Tipo = tipo; Color = color; Textura = textura; }
public void Dibujar(int x, int y)
{
Console.WriteLine($"Dibujando {Tipo} en ({x},{y}) color {Color}");
}
}
3.2 Fábrica
public class ArbolFactory
{
private Dictionary _cache = new();
public ArbolFlyweight Obtener(string tipo, string color, string textura)
{
string key = $"{tipo}-{color}-{textura}";
if(!_cache.ContainsKey(key))
_cache[key] = new ArbolFlyweight(tipo, color, textura);
return _cache[key];
}
}
3.3 Uso
var factory = new ArbolFactory();
var roble = factory.Obtener("Roble", "Verde", "Rugosa");
roble.Dibujar(10, 20);
roble.Dibujar(15, 30); // mismo objeto, distinta posición
4. Flyweight vs Singleton
Singleton garantiza una sola instancia total. Flyweight reutiliza muchas instancias compartidas de tipos específicos.
5. Diagrama UML
Prompt: UML diagram of Flyweight pattern, clean vector, minimal palette.
Prompt: Diagram showing intrinsic vs extrinsic state, split layout, infographic style.
⚠️ Cuándo NO Usar Flyweight
- Si no tienes muchos objetos repetidos.
- Si el coste de gestionar el cache es mayor que el ahorro.
💪 Ejercicio
Simula un editor de texto que reutiliza glifos para cada letra.
Conclusión
Flyweight es clave cuando la memoria importa. Compartir estado es su superpoder.