Pular para o conteúdo principal

Padrão Observer

O Padrão Observer é um dos padrões comportamentais que define uma dependência um-para-muitos entre objetos, de maneira que quando um objeto muda de estado, todos os seus dependentes são notificados e atualizados automaticamente. Este padrão é útil quando um objeto precisa notificar outros objetos sem precisar saber quem são esses objetos.

Quando usar o Padrão Observer?

  • Quando uma mudança no estado de um objeto precisa ser refletida em outros objetos.
  • Quando uma estrutura de eventos é necessária e você quer desacoplar o código de emissão de eventos do código de tratamento de eventos.
  • Quando você deseja evitar chamadas de método diretas e criar um sistema de notificação flexível e reutilizável.

Exemplo Prático em TypeScript

A seguir, veremos um exemplo de como o Padrão Observer pode ser implementado em TypeScript. Suponha que estamos desenvolvendo um sistema onde um Pokémon pode notificar o treinador Ash quando ele é golpeado durante uma batalha.

Implementação

src/design-patterns/observer.ts
loading...

Exemplo de uso

const pikachu = new Pikachu();
const charizard = new Charizard();

// Função que é chamada ao receber um ataque
const quandoAcontecerAtaque = (mensagem: string) => {
console.log(mensagem);
}

const ash = new Ash(pikachu, charizard, quandoAcontecerAtaque);

pikachu.receberGolpe();
// Output: Pikachu foi golpeado e sua vida é: 90
charizard.receberGolpe()
// Output: Charizard foi golpeado e sua vida é: 130

ash.pararDeObservarPikachu();
pikachu.receberGolpe();
// Nenhuma notificação é enviada, pois Ash parou de observar Pikachu

charizard.receberGolpe();
// Output: Charizard foi golpeado e sua vida é: 110