Alternativa B - Flyweight
O padrão Flyweight é utilizado especificamente para otimizar o uso de memória quando há uma necessidade de criar muitos objetos semelhantes. Ele funciona compartilhando partes comuns de estado entre os objetos, permitindo que eles sejam reutilizados em vez de criados do zero.
Análise Detalhada
Para entender por que a alternativa B é a correta, precisamos decompor os requisitos do enunciado:
- Gerenciamento de instanciação: O padrão utiliza uma FlyweightFactory que mantém uma coleção de objetos flyweight prontos para serem retornados, evitando a criação desnecessária de novas instâncias.
- Compartilhamento de objetos imutáveis: Os dados compartilhados dentro dos objetos flyweight devem ser imutáveis. Se o estado fosse mutável, o compartilhamento causaria efeitos colaterais indesejados entre os objetos que usam a mesma referência.
- Uso em larga escala: Este padrão é ideal para cenários onde milhares ou milhões de objetos são necessários (como caracteres em um editor de texto ou árvores em um jogo), onde cada nova instância consome memória significativa.
Comparação com as outras alternativas:
| Padrão | Função Principal | Por que não se encaixa |
|---|
| Proxy | Controla o acesso a um objeto | Foca em segurança ou lazy loading, não em compartilhar estado interno. |
| Facade | Simplifica interfaces complexas | Oferece uma interface única para subsistemas, não gerencia criação de objetos. |
| Composite | Estrutura hierárquica | Permite tratar objetos individuais e composições uniformemente. |
| Adapter | Compatibiliza interfaces | Converte a interface de uma classe para outra compatível. |
Conclusão
O padrão Flyweight é a única opção que descreve explicitamente a gestão de objetos através de uma fábrica para fins de compartilhamento e economia de memória, garantindo que objetos imutáveis sejam reutilizados eficientemente.