Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Opinião sobre a implementação do padrão Factory

Olá, Estou desenvolvendo um sistema para estudos, e gostaria da opinião e sugestões de vocês sobre a seguinte implementação do padrão factory. Como terei vários tipos de objetos que podem ser criados, inicialmente criei uma interface para padronizar todas as factories do sistema.

public interface EntityFactoryInterface<T> {

    public T getEntity(T entity);

    public T getEntity(Integer id);

    public T getEntity(); 

}

Nesta interface são disponibilizados três métodos. Nos dois primeiros, a factory cria o objeto buscando as suas informações de um banco de dados, e caso não encontre, cria um novo objeto. No terceiro método a factory cria um novo objeto diretamente. Segue um exemplo da implementação.

public class UnidadeMedidaFactory implements EntityFactoryInterface<UnidadeMedida>{

    @Autowired
    private UnidadeMedidaDao unidadeDao;

    @Override
    public UnidadeMedida getEntity() {
        return new UnidadeMedida();
    }    

    @Override
    public UnidadeMedida getEntity(Integer idUnidade){
        UnidadeMedida unidade = new UnidadeMedida();
        unidade.setIdUnidadeMedida(idUnidade);
        return getEntity(unidade);
    };

    @Override
    public UnidadeMedida getEntity(UnidadeMedida unidade){
        unidade = unidadeDao.findById(unidade.getIdUnidadeMedida());
        if(unidade == null){
            unidade = new UnidadeMedida();
        }    
        return unidade;
    }
}

Esta seria uma boa implementação do padrão factory, ou existe algo que seria melhor fazer de outra forma?

1 resposta
solução!

Na minha opinião a sua factory ta mais para um dao... Design pattern tem muita a ver com a facilitação da comunicação entre as pessoas... Um método que faz uma busca no banco é esperado que esteja no dao... Eu também não teria o getEntity(UnidadeMedida), já que o getEntity(id) já cumpre o papel..

Por fim não teria um método que só faz chamar o construtor... chamaria o construtor direto.

Uma fabrica deve ser utilizada quando a criação do objeto é complexo, não é o caso do seu exemplo, pelo menos na minha visão :).