Tenho a seguinte situação aqui:
Uma abstrata classe que chamarei de Base, e que atualmente possui duas subclasses: SubclasseA e SubclasseB
Tenho um método que recebe um argumento do tipo Base e, dependendo do tipo real da instancia (SubclasseA ou SubclasseB), precisa criar um outro objeto.
A princípio seria algo assim:
public void meuMetodo(Base base) {
Object o;
if (base instanceof SubclasseA) then
o = new X();
else
o = new Y();
}
Mas isso violaria o chamado “princípio aberto/fechado” (o nome em inglês soa melhor, mas vá lá…), estou correto? Pois se um dia eu criar uma nova subclasse de Base, teria que voltar aqui e alterar este método…
Acham que devo me importar com isso? É bem improvavel que surja uma outra subclasse aí…
Não dá para deixar isso em um método abstrato em Base pois Base seria uma classe de negócio e ali preciso instanciar uma tela (view) para manipular este objeto.
Um factory, seria apropriado?
De que outra forma vcs fariam isso? Estou seguindo algum caminho errado?