Aller au contenu

Flyweight

Contexte : Utiliser le partage pour supporter efficacement de grandes quantités d’objets fins.

public class Flyweight
{
private string _sharedState;
public Flyweight(string state) => _sharedState = state;
public void Operation(string uniqueState) => Console.WriteLine($"{_sharedState} + {uniqueState}");
}
public class FlyweightFactory
{
private Dictionary<string, Flyweight> _flyweights = new();
public Flyweight GetFlyweight(string key)
{
if (!_flyweights.ContainsKey(key))
_flyweights[key] = new Flyweight(key);
return _flyweights[key];
}
}

Rendu de texte : Chaque caractère d’un document peut partager un Character flyweight avec son état intrinsèque (police, taille, style). L’état extrinsèque (position) est passé lors du dessin.

Exemple : Dans .NET, l’internement des chaînes est un flyweight : les chaînes littérales identiques partagent la même mémoire. De même, la mise en cache des Int32 dans la plage -128 à 127.