Questão de Engenharia de Software — Padrões de Projeto (Engenharia de Software) — VUNESP 2023
Engenharia de Software›Padrões de Projeto (Engenharia de Software)
Código
vu197014
Banca
VUNESP
Órgão
CIJUN
Ano
2023
Cargo
Ana ( )
O design pattern cujo propósito é compartilhar partes comuns de estado entre múltiplos objetos, ao invés de manter todos os dados em cada objeto, promovendo economia de memória RAM, é denominado
ACommand.
BMediator.
CDecorator.
DProxy.
EFlyweight.
Revelar gabarito e comentário▾
GabaritoE — Flyweight.
Comentário gerado por IA. É um apoio ao estudo, ancorado em fontes, mas pode conter imprecisões — confira sempre na fonte oficial (lei, súmula, edital e gabarito da banca). Encontrou um erro? Use “Reportar”.
Padrões de Projeto (GoF): Flyweight
Gabarito: letra E. O padrão Flyweight tem exatamente o propósito descrito no enunciado: compartilhar partes comuns de estado entre múltiplos objetos para economizar memória RAM. Ele é um padrão estrutural do catálogo GoF (Gang of Four), e a alternativa correta é a letra E.
O enunciado descreve a essência do padrão Flyweight: em vez de cada objeto armazenar todos os seus dados, o estado intrínseco (comum, compartilhável) é extraído e centralizado em objetos leves (flyweights) que podem ser reutilizados por muitos contextos. O estado extrínseco (específico de cada uso) fica fora do flyweight e é passado pelo cliente. Isso reduz drasticamente o número de objetos criados e, consequentemente, o consumo de memória.
Para entender por que as outras alternativas estão erradas, é preciso conhecer o propósito de cada padrão citado:
Command: encapsula uma solicitação como um objeto, permitindo parametrizar clientes com filas, requisições e operações, além de suportar operações reversíveis (undo). Não tem relação com compartilhamento de estado ou economia de memória.
Mediator: define um objeto que centraliza a comunicação entre um conjunto de objetos, promovendo baixo acoplamento. Não compartilha estado entre objetos.
Decorator: adiciona responsabilidades a um objeto dinamicamente, de forma transparente. É um wrapper que agrega comportamento, sem compartilhar estado.
Proxy: fornece um substituto ou representante de outro objeto para controlar o acesso a ele. Pode ser usado para lazy loading, controle de acesso, logging, etc., mas não compartilha estado entre múltiplos objetos.
A pegadinha da banca está em confundir o Flyweight com outros padrões estruturais ou comportamentais, especialmente o Proxy, que também lida com economia de recursos em alguns contextos, mas por mecanismo diferente (adiamento de criação, não compartilhamento).
Padrões GoF
1Estruturais
Flyweight
Compartilha estado comum
Economia de memória RAM
Decorator
Adiciona responsabilidades
Proxy
Controla acesso
2Comportamentais
Command
Encapsula solicitação
Mediator
Centraliza comunicação
LEVEL · soulevel.com.br
Alternativa A — ❌ Incorreta
O padrão Command transforma uma solicitação em um objeto independente, permitindo que você parametrize clientes com diferentes requisições, enfileire ou registre solicitações e suporte operações que podem ser desfeitas. Ele não tem qualquer relação com compartilhamento de estado entre objetos nem com economia de memória. O erro aqui é associar um padrão comportamental de encapsulamento de ações ao conceito de otimização de memória.
Alternativa B — ❌ Incorreta
O padrão Mediator define um objeto que encapsula a interação entre um conjunto de objetos, promovendo baixo acoplamento ao evitar que os objetos se refiram uns aos outros explicitamente. Ele centraliza a comunicação, mas não compartilha estado entre os objetos — cada objeto mantém seu próprio estado. A confusão possível é pensar que "centralizar" algo implica compartilhar, mas o Mediator centraliza a comunicação, não o estado.
Alternativa C — ❌ Incorreta
O padrão Decorator anexa responsabilidades adicionais a um objeto dinamicamente, servindo como uma alternativa flexível à herança para estender funcionalidades. Ele envolve o objeto original e delega chamadas, adicionando comportamento antes ou depois. Não há compartilhamento de estado nem economia de memória — pelo contrário, o Decorator cria novos objetos que envolvem o original, o que pode até aumentar o uso de memória.
Alternativa D — ❌ Incorreta
O padrão Proxy fornece um substituto ou representante de outro objeto para controlar o acesso a ele. Ele pode ser usado para adiar a criação de objetos pesados (lazy loading), controlar permissões, fazer logging, etc. Embora o Proxy possa indiretamente economizar memória ao adiar a criação, o mecanismo é completamente diferente do Flyweight: o Proxy não compartilha estado entre múltiplos objetos; ele apenas controla o acesso a um único objeto. A banca explora essa confusão: ambos lidam com otimização, mas de formas distintas.
Alternativa E — ✅ Correta ⟵ GABARITO
O padrão Flyweight é exatamente o que o enunciado descreve: compartilhar partes comuns de estado entre múltiplos objetos, em vez de manter todos os dados em cada objeto, promovendo economia de memória RAM. Ele é um padrão estrutural que usa compartilhamento para suportar grandes quantidades de objetos de granularidade fina de forma eficiente. O estado intrínseco é armazenado no flyweight e o extrínseco é passado pelo cliente, permitindo que um mesmo flyweight seja usado em muitos contextos.
PEGA ESSA DICA!
Para identificar o Flyweight na prova, procure por palavras-chave como "compartilhar", "economia de memória", "estado comum", "objetos leves", "reutilização". Se a questão falar em "controle de acesso" ou "adiar criação", pense em Proxy; se falar em "adicionar responsabilidades", pense em Decorator; se falar em "encapsular solicitação", pense em Command; se falar em "centralizar comunicação", pense em Mediator.