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!