Olá a todos, estou estudando os padrões e comparando com casos reais que tenho em mãos. Me deparo muito com códigos assim:
classe Qualquer
...
MetodoQualquer()
...
dadoEvento = retornaDados(baseadoEmAlgumParametro);
classeEvento = new Evento(configDoEventoDeAlgumLugar);
classeEvento->disparaEvento(dadoEvento)
...
class Evento
disaparaEvento(dadoEvento)
SE(dadoEvento.TIPO == '1')
SE(dadoEvento.OUTROTIPO == 'A')
facaAlgoEmAlgumLugar1(dadoEvento);
SE ENTAO(dadoEvento.OUTROTIPO == 'B')
facaAlgoEmAlgumLugar2(dadoEvento);
SENAO
facaAlgoEmAlgumLugar3(dadoEvento);
SENAO
facaAlgoEmAlgumLugar4(dadoEvento);
Vendo o padrão Strategy, pensei: "Fácil! Posso diminuir esses Ifs de acordo com o Strategy. Basta eu construir o objeto e passar para ele disparar de acordo com seu tipo". Assim:
class Evento
disparaEvento(InterfaceTipoDoEvento TipoDoEvento)
TipoDoEvento->facaAlgoNaMinhaClasseConcreta();
Mas, neste ponto, apareceu minha dúvida ou o ponto onde não consigo enxergar: Neste caso, como é possível construir TipoDoEvento sem ter que fazer IFs baseado nos dados da variável dadoEvento construída no MetodoQualquer? O Strategy realmente se encaixa para resolver problemas assim?