디자인 모델 - 관찰자 모델 과 게시 - 구독 모델 의 차이 점 분석

4099 단어
면접 에서 물 어 볼 때 도 있 습 니 다.
관찰자 모드 와 게시 구독 모드 의 차이 점 은?
다 를 게 없 죠?
차이 가 있 는 것 같은 데?
우선 '관찰자 모드' 와 '구독 모드 발표' 를 살 펴 보 겠 습 니 다.
1. 관찰자 디자인 모델
디자인 모델 이 디자인 초기 에 어떤 문 제 를 해결 하기 위해 코드 를 작성 할 때 서로 다른 디자인 모델 을 잘 활용 할 수 있 는 지 이해 하 는 것 이다.
이른바 관찰자 모델 이란 송 결합 (loosely coupled) 을 실현 하기 위해 서, 즉 결합 을 풀기 위해 서 이다.
데이터 에 변화 가 있 고 업데이트 가 있 을 때 어떤 방법 이 호출 되 고 이 때 다른 곳 에서 이 데 이 터 를 사용 해 야 하 는 곳 을 업데이트 할 수 있 습 니 다.
예 를 들 어:
기상 관측소 의 경우 기상 관측소 의 테스트 데이터 가 업 데 이 트 될 때마다 change () 방법 이 호출 되 기 때문에 우 리 는 change () 방법 에서 기상 기기 의 데 이 터 를 업데이트 한다. 예 를 들 어 온도, 기압 등 이다.
이렇게 쓰 는 것 은 문제 가 없 지만 만약 에 우리 가 나중에 change () 방법 을 호출 할 때 더 많은 정 보 를 업데이트 해 야 한다. 예 를 들 어 습도, 이때 우 리 는 change () 방법의 코드 를 수정 해 야 한다. 이것 이 바로 결합 의 나 쁜 점 이다.
그럼 이 긴밀 한 결합 문 제 를 어떻게 해결 합 니까?
관찰자 모드 에서 changed () 방법 이 있 는 인 스 턴 스 대상 은 피 관찰자 (subject) 입 니 다. 관찰자 (observer) 의 집합 만 유지 해 야 합 니 다. 이 observer 들 은 같은 인 터 페 이 스 를 실현 합 니 다. subject 는 관찰자 (observer) 에 게 알 릴 때 어떤 통일 방법 을 사용 해 야 하 는 지 알 아야 합 니 다.
간단 한 예 를 다시 한 번 보 겠 습 니 다.
function Subject(){
    this.observerData = [];
}
Subject.prototype = {
    add: function(observer) {
        this.observerData.push(observer);
    },
    remove:function(observer) {
        var observerData = this.observerData;
        for(let i=0,length=observerData.length;iif(observerData[i] === observer){
                observerData.splice(i,1)
            }
        }
    },
    notify: function() {
        var observerData = this.observerData;
        for(let i=0,length=observerData.length;ifunction Observer(name){
    this.name = name;
}

Observer.prototype = {
    update: function() {
        console.log('hello,' + this.name);
    }
}

var sub = new Subject();

var obj1 = new Observer('saucxs');
var obj2 = new Observer('songEagle');

sub.add(obj1);
sub.add(obj2);
sub.notify();

이때 출력 한 건...
hello,saucxs
hello,songEagle
상기 코드 에서 저 희 는 Subject 대상 과 두 개의 Observer 대상 을 만 들 었 습 니 다. 현재 상태 가 변경 되 었 을 때 Subject 대상 의 notify 방법 으로 두 개의 Observer 대형 을 알 립 니 다. 이 두 Observer 대상 은 update 방법 으로 업 데 이 트 됩 니 다.
2. 게시 구독 모드 (Publisher & & Subscriber)
사실 게시 구독 모드 의 Publisher 는 관찰자 모드 의 Subject 이 고 Subscriber 는 Observer 라 고 생각 합 니 다.Publisher 가 변 할 때 자발적으로 Subscriber 에 게 알 립 니 다.
사실은 그렇지 않 습 니 다.
게시 구독 모드 에서 게시 자 는 구독 자 에 게 직접 알 리 지 않 는 다. 다시 말 하면 게시 자 와 구독 자 는 서로 보완 하고 알 게 된다.
그럼 그들 사 이 는 어떻게 통신 을 합 니까?제3 자 를 통과 하 는 것 입 니 다. 바로 메시지 대기 열 에서 우리 가 자주 말 하 는 매니저 Broker 입 니 다.
발표 자 는 Broker 에 게 만 메 시 지 를 보 내 겠 다 고 말 해 야 합 니 다.topic 는 "saucxs" 입 니 다.
구독 자 는 Broker 에 게 만 알려 주 십시오. 저 는 topic 를 구독 하려 면 "saucxs" 입 니 다.
그래서 Broker 가 게시 자가 보 낸 메 시 지 를 받 고 topic 이 saucxs 일 때 메 시 지 를 topic 을 구독 한 saucxs 의 구독 자 에 게 보 내 고 구독 자가 직접 와 서 끌 어 올 리 며 코드 를 구체 적 으로 볼 수 있 습 니 다.
즉, 게시 구독 모드 에서 게시 자 와 구독 자 는 느슨 한 결합 이 아니 라 완전한 결합 이다.
아주 간단 한 그림 을 놓 고 두 모델 의 차 이 를 비교 해 보 세 요.
3. 총화
겉으로 보면:
1. 관찰자 모델 에서 두 가지 역할: 관찰자 와 피 관찰자
2. 게시 구독 모드 에서 세 가지 역할: 게시 자, 구독 자, 매니저
심층 적 으로 보면:
1. 관찰자 모드: 관찰자 와 피 관찰자, 소나무 결합 관계
2. 게시 구독 모드: 게시 와 구독 자 는 결합 이 전혀 존재 하지 않 습 니 다.
사용 차원 에서 보면:
1. 관찰자 모드: 주로 하나의 응용 내부 에 사용 되 고 단일 사건 이 여러 개의 의존 에 대응 하 는 것 을 유지 합 니 다.
이벤트 - > [obj 1, obj 2, obj 3,...] 2. 구독 모드 발표: 다 중 응용 모드, 예 를 들 어 우리 가 말 한 메시지 의 미들웨어, 여러 이벤트 와 의존 하 는 것 을 유지 합 니 다.
event1 -> [obj1,obj2,...] event2 -> [obj1,obj3,...]

좋은 웹페이지 즐겨찾기