Lista de Exercícios 013: Flyweight
Exercício 1 : Situações para análise
Seção intitulada “Exercício 1 : Situações para análise”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.
- Situação 1: um mapa do campus exibe dez mil marcadores, mas apenas quatro estilos visuais diferentes se repetem entre eles.
- Situação 2: uma classe
CalculadoraMediapossui apenas dois atributos numéricos e poucas instâncias por execução. - Situação 3: um editor de texto mantém milhões de caracteres, compartilhando famílias de fonte, tamanhos e estilos que se repetem.
- 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.
- Situação 5: um jogo acadêmico de simulação usa milhares de árvores decorativas com mesma textura, mesma cor e mesmo modelo visual.
Exercício 2 : Código com problema
Seção intitulada “Exercício 2 : Código com problema”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.
Exercício 3 : Múltipla escolha
Seção intitulada “Exercício 3 : Múltipla escolha”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.
Exercício 4 : Implementação simples
Seção intitulada “Exercício 4 : Implementação simples”Implemente uma solução simples usando Flyweight para representar locais em um mapa universitário.
- Crie uma classe
TipoLocalFlyweightcom dados compartilhados comocategoria,coreicone. - Crie uma fábrica
TipoLocalFactoryque reutilize instâncias já criadas. - Crie uma classe de contexto
LocalMapacomx,yenome. - Faça o contexto usar um
TipoLocalFlyweightpara renderização. - No
main, crie vários locais e mostre que poucos tipos visuais foram compartilhados.