Como devo selecionar qual implementação concreta deve ser instanciada com base na escolha do usuário?
Eu tenho uma interfaceFruit
com duas implementaçõesApple
eBanana
. Eu quero criar umFruit
instância. A escolha de se a implementação concreta deve ser umApple
ou umBanana
deve ser feita pelo usuário. Ainda não projetei a interface do usuário, portanto não há restrições sobre como essa escolha é feita pelo usuário.
Eu sei que existem as seguintes opções:
uso do padrão abstrato de fábricauso de reflexão para criar uma instância a partir de um determinado nome de classeuso de reflexão para criar uma instância de um determinado objeto de classeQuais são os prós e os contras dessas opções?
Observe que, embora existam várias perguntas semelhantes que discutem uma ou outra abordagem, não encontrei uma única comparação.
Aqui está uma lista de perguntas relacionadas:
Por que Class.newInstance () é "mau"?Posso usar Class.newInstance () com argumentos de construtor?Como criar uma ArrayList de classes?Class.newInstance () segue o padrão de design "Fábrica abstrata"?