Tentando implementar algo como Abstract Factory

1 resposta
V

Bom gente, desculpem-me pelo título pouco significativo, mas não consegui pensar em nada melhor.

Minha dúvida é a seguinte:

Eu trabalho com algoritmos de otimização e gostaria de implementar uma interface única de uma classe abstrata Algoritmo (ou talvez apenas uma interface mesmo). Esta classe teria algo como os métodos abstratos init(), executar() e getSolucao(). Mais ou menos assim:

public abstract class Algoritmo {

   public abstract void init(Dados dados, Parametros);

   public abstract void executar();

   public abstract Solucao getSolucao();
}

Bem, poderíamos ter algumas variações disso, como implementar o Template Method() no método executar, chamando os outros métodos… sei lá.

A questão é que para problemas diferentes, eu tenho Dados e Solucao diferentes; e para algoritmos diferentes, Parametros diferentes. Por exemplo:

public class Parametros {

   private long tempoMax;

   private double alfaQualquer;
}

public class ParamAlgoritmoGenetico extends Parametros {

   private int tamPop;

   private double taxaMutacao;
}

ou seja, membros novos, que Parametros não tem acesso. Como fazer algo do tipo abaixo sem gambiarra (como casting)?

...

// Caixeiro Viajante
Problema prob = Problema.getInstance("CV");

// objeto da classe DadosCV
Dados dados = prob.formatDados();

dados.ler(arquivo);

// Algoritmo genético
Algoritmo alg = Algoritmo.getInstance("AG");

// objeto de ParamAlgoritmoGenetico
Parametros param = alg.getParam();

alg.init(dados,param);

alg.executar();

// objeto da classe SolucaoCV
Solucao sol = prob.formatSolucao();

sol.setSolucao(alg.getSolucao());
...

Eu sei que não fui muito claro, mas se vocês tentarem me ajudar, eu ficarei muito grato!

Abraços,
Victor

1 Resposta

otaviojava

Olha para te ser sincero não te entendi muito.
Mas você pode Fazer que o construtor seja um Map<String,Objetc>
Assim para cada problema você poderia colocar objetos diferentes.

Deste modo vc constroi um método abstrato executar.
Que será responsável pelo processamento e pegar tais objetos.

Criado 28 de dezembro de 2010
Ultima resposta 28 de dez. de 2010
Respostas 1
Participantes 2