[디자인 패턴] 옵저버 패턴
시나리오 문제
이제 게시자 개체와 많은 구독자 개체가 있고 구독자 개체가 게시자로부터 새 상태를 폴링합니다. 그러나 이러한 모든 구독자는 게시자가 언제 새 상태를 업데이트할지 모르기 때문에 게시자로부터 새 상태를 계속 폴링합니다(예: 1분마다 폴링).

이제 악취가 난다... 1000명 정도의 구독자가 있고 각자 10초마다 상태를 얻으려고 하면 어떻게 될까요!?
결과적으로 요청 트래픽이 폭증해야 하고 분명히 불필요한 호출이 많이 발생합니다... 또한 가입자는 가장 최근 상태를 얻지 못할 수 있습니다. 상태를 가져오기 전에 여전히 최대 10초의 지연이 있습니다.
해결책
Observable 패턴을 사용하면 게시자(Observable 객체)가 새로운 상태를 가질 때마다 모든 구독자에게 알립니다. 이렇게 하면 불필요한 호출을 많이 피할 수 있고 모든 가입자는 지체 없이 즉시 최신 상태를 얻을 수 있습니다.

구현
패턴의 매우 간단한 클래스 다이어그램은 다음과 같습니다.

게시자 클래스의
register()
목록에 구독자를 추가하거나 제거하는 unregister()
및 subscribers
메서드가 있습니다.게시자
notify()
의 방법은 다음과 같습니다.public void notify() {
this.status = // Do whatever to get the latest status...;
this.subscribers.stream().foreach((s) -> {
s.update(this.status);
});
}
구독자
update()
의 방법은 다음과 같습니다.public void update(Object status) {
// Do whatever the subscriber want to do with the received status.
}
이것은 매우 기본적이고 간단한 관찰자 패턴입니다. 옵저버 패턴에는 실제로 다양한 종류의 구현이 있지만 핵심 개념은 일반적으로 동일합니다.
Reference
이 문제에 관하여([디자인 패턴] 옵저버 패턴), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/edindevto/design-pattern-observer-pattern-1011텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)