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]; }}Exemple d’utilisation dans le monde réel
Section intitulée « Exemple d’utilisation dans le monde réel »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.