"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > JavaScript 디자인 패턴 - 동작 - 관찰자

JavaScript 디자인 패턴 - 동작 - 관찰자

2024-08-18에 게시됨
검색:742

JavaScript Design Patterns - Behavioral - Observer

관찰자 패턴을 사용하면 객체 간의 일대다 종속성을 정의할 수 있으므로 하나의 객체 상태가 변경되면 모든 종속 항목이 자동으로 통보되고 업데이트됩니다.

이 예에서는 다른 클래스가 register() 메소드의 변경 사항 등록을 관찰할 수 있는 간단한 클래스 제품을 만듭니다. 무언가가 업데이트되면 notifyAll() 메서드는 이러한 변경 사항에 대해 모든 관찰자와 통신합니다.

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 };

완전한 예가 여기에 있습니다. https://stackblitz.com/edit/vitejs-vite-kycyd?file=main.js

결론

한 개체의 상태를 변경하려면 다른 개체를 변경해야 할 수 있고 실제 개체 집합을 미리 알 수 없거나 동적으로 변경하는 경우 이 패턴을 사용합니다.


도움이 되셨기를 바랍니다. 읽어주셔서 감사합니다. ?

연결하자! 다음에서 저를 찾으실 수 있습니다:

  • 매체: https://medium.com/@nhannguyendevjs/
  • 개발자: https://dev.to/nhannguyendevjs/
  • 해시노드: https://nhannguyen.hashnode.dev/
  • 링크드인: https://www.linkedin.com/in/nhannguyendevjs/
  • X(이전 트위터): https://twitter.com/nhannguyendevjs/
  • 커피 사주세요: https://www.buymeacoffee.com/nhannguyendevjs
릴리스 선언문 이 글은 https://dev.to/nhannguyendevjs/javascript-design-patterns-behavioral-observer-g70?1에서 복제되었습니다. 침해 내용이 있는 경우, [email protected]으로 연락하여 삭제하시기 바랍니다.
최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3