Pular para o conteúdo

Lista de Exercícios 013: Flyweight

Analise cada situação e diga se o padrão Flyweight é ou não uma boa escolha. Em cada caso, classifique como adequada ou não adequada e justifique brevemente.

  1. Situação 1: um mapa do campus exibe dez mil marcadores, mas apenas quatro estilos visuais diferentes se repetem entre eles.
  2. Situação 2: uma classe CalculadoraMedia possui apenas dois atributos numéricos e poucas instâncias por execução.
  3. Situação 3: um editor de texto mantém milhões de caracteres, compartilhando famílias de fonte, tamanhos e estilos que se repetem.
  4. Situação 4: um sistema precisa guardar para cada aluno nome, matrícula, curso e situação, sendo quase todos os dados diferentes entre si.
  5. Situação 5: um jogo acadêmico de simulação usa milhares de árvores decorativas com mesma textura, mesma cor e mesmo modelo visual.

Leia o código abaixo, identifique o problema conceitual relacionado ao uso de memória e sugira como melhorá-lo em alto nível usando Flyweight.

class MarcadorMapa {
private String categoria;
private String cor;
private String icone;
private int x;
private int y;
private String nome;
public MarcadorMapa(String categoria, String cor, String icone, int x, int y, String nome) {
this.categoria = categoria;
this.cor = cor;
this.icone = icone;
this.x = x;
this.y = y;
this.nome = nome;
}
}

Considere na resposta os conceitos de estado intrínseco, estado extrínseco, compartilhamento e uso de uma fábrica.

Uma equipe quer reduzir o consumo de memória de um sistema gráfico que mantém milhares de objetos semelhantes. O plano é compartilhar a parte imutável e repetida do estado e deixar posição e contexto fora do objeto compartilhado. Qual alternativa descreve melhor essa solução?

a. Usar Flyweight para compartilhar o estado intrínseco entre várias ocorrências.

b. Usar Proxy para controlar o acesso a um objeto remoto com a mesma interface.

c. Usar Facade para esconder um subsistema complexo atrás de uma interface simples.

d. Usar Builder para construir os objetos em etapas antes do uso.

e. Usar Strategy para escolher dinamicamente o comportamento de cada objeto sem compartilhamento.

Implemente uma solução simples usando Flyweight para representar locais em um mapa universitário.

  • Crie uma classe TipoLocalFlyweight com dados compartilhados como categoria, cor e icone.
  • Crie uma fábrica TipoLocalFactory que reutilize instâncias já criadas.
  • Crie uma classe de contexto LocalMapa com x, y e nome.
  • Faça o contexto usar um TipoLocalFlyweight para renderização.
  • No main, crie vários locais e mostre que poucos tipos visuais foram compartilhados.