Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Flyweight com factory

Boa noite! Sobre o exercício aonde se deve implementar o Flyweight com uma Factory.

O construtor static abaixo é essencial para o Flyweight?

    static{
        notas.put("do", new Do() );
        notas.put("re", new Re());
        notas.put("mi", new Mi());
        notas.put("fa", new Fa());
        notas.put("sol", new Sol());
        notas.put("la", new La());
        notas.put("si", new Si());
    }

Implementei da forma abaixo:

package fliegengewicht02;

import java.util.HashMap;
import java.util.Map;

public class NotasMusicais {
    private static Map<String,Nota>notas = new HashMap<String,Nota>();

    public Nota pega(String nome){
        if(notas.get(nome)==null){
            FactoryDeNotas fabricanotas=new FactoryDeNotas(nome);
            notas.put(nome, fabricanotas.getNotaMusical());
        }
        return notas.get(nome);
    }

}

Mas, vi a implementação da Opinião do Professor e vi que está bem diferente. Então, reptido a pergunta: a parte static{...} é essencial para esse padrão de projetos?

Obrigado!

2 respostas
solução!

Não precisa do static{...} não, Paulo. Sua forma me pareceu perfeitamente viável.

A implementação do professor tentou usar o truque esperto da reflection pra instanciar a classe certa mais facilmente. Mas usar a Factory como voce fez é um excelente caso.

Ah tá, o bom do uso do Reflection foi que eu vi ele aplicado na prática sem que eu visse no Stackoverflow. kkkkkkkkkk Normalmente quando a gente quer fazer algo e não sabe de uma boa implementação aí esses casos aparecem e na pressa a gente pensa que é muito complexo. O exemplo já me deu um "molde" de como posso usar.

Obrigado pela rápida resposta!