Open/closed principle

0 respostas
M

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?

Criado 12 de agosto de 2009
Respostas 0
Participantes 1