"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Padrões de Design JavaScript - Comportamental - Observador

Padrões de Design JavaScript - Comportamental - Observador

Publicado em 2024-08-18
Navegar:918

JavaScript Design Patterns - Behavioral - Observer

O padrão observer permite a definição de dependência um-para-muitos entre objetos para que todos os seus dependentes sejam notificados e atualizados automaticamente quando um objeto muda de estado.

Neste exemplo, estamos criando um produto de classe simples que outras classes podem observar registrando mudanças no método register(). Quando algo é atualizado, o método notifyAll() se comunicará com todos os observadores sobre essas mudanças.

class ObservedProduct {
  constructor() {
    this.price = 0;
    this.actions = [];
  }

  setBasePrice(val) {
    this.price = val;
    this.notifyAll();
  }

  register(observer) {
    this.actions.push(observer);
  }

  unregister(observer) {
    this.actions.remove.filter(function (el) {
      return el !== observer;
    });
  }

  notifyAll() {
    return this.actions.forEach(
      function (el) {
        el.update(this);
      }.bind(this)
    );
  }
}

class Fees {
  update(product) {
    product.price = product.price * 1.2;
  }
}

class Profit {
  update(product) {
    product.price = product.price * 2;
  }
}

export { ObservedProduct, Fees, Profit };

Um exemplo completo está aqui? https://stackblitz.com/edit/vitejs-vite-kyucyd?file=main.js

Conclusão

Use este padrão quando as alterações no estado de um objeto podem exigir a alteração de outros objetos e o conjunto real de objetos é desconhecido de antemão ou muda dinamicamente.


Espero que você tenha achado útil. Obrigado por ler. ?

Vamos nos conectar! Você pode me encontrar em:

  • Médio: https://medium.com/@nhannguyendevjs/
  • Desenvolvedor: https://dev.to/nhannguyendevjs/
  • Hashnode: https://nhannguyen.hashnode.dev/
  • Linkedin: https://www.linkedin.com/in/nhannguyendevjs/
  • X (anteriormente Twitter): https://twitter.com/nhannguyendevjs/
  • Compre um café para mim: https://www.buymeacoffee.com/nhannguyendevjs
Declaração de lançamento Este artigo está reproduzido em: https://dev.to/nhannguyendevjs/javascript-design-patterns-behavioral-observer-g70?1 Se houver alguma infração, entre em contato com [email protected] para excluí-la
Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3