Estado intrínseco e extrínseco

Um mapa com milhares de marcadores pode repetir ícone, cor e estilo. Esses dados intrínsecos podem ser compartilhados; posição e estado selecionado são extrínsecos e continuam associados a cada marcador.

Exemplo em C#

public sealed record EstiloMarcador(string Icone, string Cor);
public sealed class Estilos
{
    private readonly Dictionary<string, EstiloMarcador> _cache = new();
    public EstiloMarcador Obter(string tipo) =>
        _cache.TryGetValue(tipo, out var estilo)
            ? estilo
            : _cache[tipo] = Criar(tipo);
    private static EstiloMarcador Criar(string tipo) => new($"{tipo}.svg", "#2f8f64");
}
public sealed record Marcador(double Latitude, double Longitude, EstiloMarcador Estilo);

Objetos de estilo imutáveis tornam seguro compartilhar a mesma referência.

Quando vale o custo

Use após medir pressão de memória em populações grandes de objetos repetitivos. Cache, concorrência, invalidação e crescimento sem limite também têm custo; não transforme toda entidade em flyweight preventivamente. Proxy também pode controlar acesso a objetos; leia o índice dos padrões GoF.