Eu tenho um abstract class Aque declara um método abstrato doStuff. Atualmente, existem muitas classes que herdam Ae implementam doStuff.
As instâncias da classe são inicializadas em tempo de execução via com AFactorybase na entrada do usuário. Originalmente, todas as classes tinham o mesmo parâmetro único (a entrada do usuário). Mas agora eu tenho um parâmetro adicional que apenas uma nova classe que herda Anecessidades.
Então, detalhando, pensei na seguinte lógica:
A classe de intérpretes que gera instâncias com base na entrada do usuário (usando, é
AFactoryclaro) não estava ciente desse parâmetro extra.- Tentar inseri-lo no intérprete de classe seria muito estranho, porque eu teria que saber quando passá-lo à fábrica, o que anula todo o propósito de ter uma fábrica em primeiro lugar.
- Enviá-lo às cegas para a fábrica, esperando que possa fazer algo com isso, também parece bastante feio.
Minha solução atual: Enquanto isso eu decidi refactor
A.doStuff(Param param)emA.doStuff(AParams params).AParamspode conter os parâmetros necessários edoStuffpode ignorá-los se não estiverem interessados neles. Isso também me parece um pouco estranho e me impede de enviar estruturas no WIN32API que podem conter muitos parâmetros inúteis e feios e não gosto disso.
Existe uma maneira mais elegante de abordar esse problema? Ou algum padrão de design que eu negligenciei e resolve isso?
Notas :
- Estamos usando o Java 1.7
- Os nomes das turmas são bobos, a fim de enfatizar a questão do design teórico, eles têm nomes indicativos e significativos normais na realidade :)
- Pesquisei bastante, mas depois de descobrir que é muito difícil pesquisar na Web questões teóricas abstratas específicas (em vez de por que está
XlançandoExceptionesse código), decidi perguntar mesmo assim, desculpe se isso é um duplicado.
Editar 1 :
- Esclarecimento: preciso passar um argumento específico da subclasse para o
doStuffmétodo.
EDIT 2 :
Como não entendi completamente a intenção de Kilian Foth, escrevi um pseudo-código Java para me ajudar a explicar melhor o problema / entender sua solução. Assim:
Este é um esqueleto do meu problema.
Este é um esqueleto da minha solução.
Isso é o que eu acho que poderia ser a solução da Kilian Foth, mas eu não tenho certeza.
EntryPointvamos chamá-lo, mainque então chama alguns Interpreterque atualmente não recebem o parâmetro extra como parâmetro e a fábrica também. O parâmetro extra vem de outro tipo de entrada do usuário que não é descrito por UserInput(que infelizmente não posso alterar).
doStuffmétodo?