1
resposta

Não é estranho o main ser o conhecedor dos passos necessários para o Handler?

Entendi o objetivo e funcionamento do Observer, mas para mim pareceu bem estranho ser o chamador de teste (main) o responsável por criar e passar como parâmetro para o GeraPedidoHandler a lista de ações que ele deve executar. Conceitualmente, me parece fazer mais sentido que a responsabilidade de saber quais ações executar seja da própria classe de gerar pedidos. Então me parece que faria mais sentido q essa lista de ações fosse criada dentro do construtor do GeraPedidoHandler, e não recebida como parâmetro por ele.

Faz sentido o quê eu falei? Fazer dessa forma feriria o pattern Observer?

1 resposta

Olá Thiago, tudo bem?

Entendo sua dúvida em relação ao padrão Observer e a responsabilidade de saber quais ações executar. Na verdade, a ideia do padrão Observer é justamente permitir que objetos sejam notificados de mudanças em outros objetos, sem que haja acoplamento entre eles.

No caso específico do GeraPedidoHandler, ele é um observador do objeto que gera pedidos e, por isso, precisa ser notificado quando um novo pedido é gerado. A lista de ações que ele deve executar quando isso acontece é definida pelo objeto que gera pedidos, e não pelo próprio GeraPedidoHandler.

Dessa forma, não é estranho que o main seja o responsável por criar e passar como parâmetro a lista de ações para o GeraPedidoHandler. Isso não fere o padrão Observer, pois cada objeto tem sua responsabilidade bem definida e não há acoplamento entre eles.

Sobre sua sugestão de criar a lista de ações dentro do construtor do GeraPedidoHandler, isso também é possível e não feriria o padrão Observer. No entanto, é importante lembrar que essa lista de ações pode variar de acordo com o contexto em que o GeraPedidoHandler é utilizado, e por isso faz mais sentido que ela seja definida pelo objeto que gera pedidos e passada como parâmetro.

Espero ter ajudado a esclarecer sua dúvida. Qualquer outra questão, é só perguntar!

Espero ter ajudado e bons estudos!