JavaScript 중개자 모드 와 관찰자 모드 는 어떻게 다 릅 니까?

4934 단어 JavaScript
http://addyosmani.com/resources/essentialjsdesignpatterns/book/#detailmvp
두 사람 이 매우 비슷 하 다 고 생각 합 니 다. 모두 pub / sub 체제 인 데 어떻게 구분 합 니까?각각 어떤 다른 장면 에서 응용 합 니까?
  • Obsever 모드 에 서 는 패 키 징 제약 의 단일 대상 이 존재 하지 않 습 니 다.Observer 와 Subject 가 협력해 야 제약 을 유지 할 수 있 습 니 다.
  • Communication (통신) 모델 은 관찰자 와 목표 가 서로 연결 되 는 방식 으로 결정 된다. 단일 목 표 는 보통 많은 관찰자 가 있 고 어떤 목 표 는 다른 관찰자 의 목표
  • 이다.
  • Mediator 와 Observer  모두 소나무 결합 을 촉진 할 수 있 습 니 다. 그 다음 에 Mediator 모델 은 제한 대상 을 통 해 Mediator 를 통 해 통신 을 통 해 이 목적 을 실현 합 니 다
  • .
  • Observer 모드 생 성 관찰자 가 그것 을 좋아 하고 관찰자 대상 은 그들 이 좋아 하 는 것 에 관심 이 있 는 이 벤트 를 구독 합 니 다.

  • GoF 의 원문 에서 관찰자 모델 을 이렇게 묘사 했다.
  • One or more observers are interested in the state of a subject and register their interest with the subject by attaching themselves. When something changes in our subject that the observer may be interested in, a notify message is sent which calls the update method in each observer. When the observer is no longer interested in the subject's state, they can simply detach themselves.
  • 구체 적 인 응용 장면 은 subject 의 특정한 동작 이 일련의 서로 다른 대상 의 동작 을 일 으 켜 야 한 다 는 것 이다 (예 를 들 어 반장 이 반 의 누 군 가 를 알 리 려 고 하 는 것). 하나의 수 동 호출 트리거 방법 (개인 적 으로 하나의 알림) 과 달리 이 목록 은 당신 이 호출 하고 자 하 는 대상 방법 이 저장 되 어 있다.(알 리 고 싶 은 사람). 그 다음 에 트리거 를 할 때마다 이 목록 을 돌아 가면 서 물 어보 면 됩 니 다. (단체 발송) 이 목록 에 누가 있 는 지 에 관심 을 가지 지 않 고 누가 가입 하고 싶 은 지 에 만 관심 을 가 집 니 다.
  • 이 목록 은 Observer List 라 고 합 니 다. 유지 보수 목록 방법 이 있 습 니 다.
    function ObserverList(){
      this.observerList = [];
    }
    ObserverList.prototype.Add = function( obj ){};
    ObserverList.prototype.Empty = function(){};
    ObserverList.prototype.Count = function(){};
    ObserverList.prototype.Get = function( index ){};
    ObserverList.prototype.Insert = function( obj, index ){};
    ObserverList.prototype.IndexOf = function( obj, startIndex ){};
    ObserverList.prototype.RemoveAt = function( index ){};
    

    그리고 우리 의 subject 는 두 가지 일 에 만 관심 을 가 집 니 다. 1. 이 목록 을 지 키 고 2. 이 벤트 를 발표 합 니 다.
    function Subject(){
      this.observers = new ObserverList();
    }
    
    Subject.prototype.AddObserver = function( observer ){
      this.observers.Add( observer );
    };  
    
    Subject.prototype.RemoveObserver = function( observer ){
      this.observers.RemoveAt( this.observers.IndexOf( observer, 0 ) );
    };  
    
    Subject.prototype.Notify = function( context ){
      var observerCount = this.observers.Count();
      for(var i=0; i < observerCount; i++){
        this.observers.Get(i).Update( context );  
        //                  update  ,                       ,              ,       :
        // subscription.callback.apply( subscription.context, args );
      }
    };
    

    중개 모드 (Mediator Pattern)
    우 리 는 이런 장면 을 가정 합 시다. 관리자 가 명령 을 내리 면 노동자 A 와 노동자 B 가 일 을 시작 해 야 합 니 다. 코드 는 이 럴 수 있 습 니 다.
    Manager.start = function () {
        A.work();
        B.work();
    }
    

    사실은 이렇게 쓸 수 있 습 니 다. 중개 모듈 을 추가 할 수 있 습 니 다. 이 모듈 은 Manager 의 자주 사용 하 는 명령 이 저장 되 어 있 습 니 다. 예 를 들 어 start, stop, resume 등 모든 명령 을 유지 하 는 것 도 하나의 목록 입 니 다. 예 를 들 어 start 의 목록 에 모든 직원 의 start 방법 이 저장 되 어 있 습 니 다.
    Mediator["start"] = [
        {
            name: 'A',
            callback: 'work'
        },
        {
            name: 'B',
            callback: 'workAgain'
        },
    ]
    

    그래서 Manager 의 방법 은 다시 쓸 수 있 습 니 다.
    Manager.start = function () {
        Mediator.publish('start')   // publish        ,     start            
    }
    

    코드 디 테 일 은 보 여주 지 않 습 니 다. 주로 이런 체 제 를 나타 내 는데 만약 에 한 직원 이 자신의 work 방법 을 제출 하여 사장 에 게 호출 시 키 려 면 등록 만 하면 됩 니 다.
    Mediator.subscribe('C', function callback() {});
    

     
    문 제 는 중개 모듈 을 새로 늘 리 는 장점 이 무엇 입 니까?
    1. 저 결합! 만약 에 매니저 가 직원 들 에 게 일 을 시 키 려 고 하지 않 으 면 회장 님 은 어떻게 하 시 겠 습 니까? 아니면 부서 의 주관자 가 어떻게 하 시 겠 습 니까? 이렇게 써 야 합 니까?
    XXX.start = function () {
        A.work()
        B.work();
    }
    

    모두 A. work 무엇 을 한 번 베껴 야 합 니까? 물론 아 닙 니 다. 중개 모듈 에 명령 만 내리 면 됩 니 다. 2. 모듈 간 에 통신 이 필요 없습니다. 방송 과 감청 사건 만 맡 으 면 됩 니 다. 3. 모듈 화 된 자바 script 에서 중개 모듈 은 유지 가능성 을 높 일 수 있 습 니 다. 어떤 모듈 을 시작 할 지, 어떤 모듈 을 시작 할 수 있 는 권한 이 있 는 지, 다른 모듈 을 불 러 올 수 있 는 권한 이 있 는 지, 모듈 간 의의존 관계, 일부 모듈 이 작 동 에 실패 하면 어떻게 합 니까? 이러한 경계 조건 은 모두 그것 에 게 맡 겨 판단 할 수 있 습 니 다. 다른 모듈 은 자신의 논 리 를 실현 하 는 데 만 관심 을 가 졌 으 면 좋 겠 습 니 다. 마지막 으로 예 를 들 어 중개 모듈 은 정말 부동산 중개인 과 같 습 니 다. 만약 당신 이 집주인 이 라면 "나 는 사람 을 찾 아 집 을 세 내 겠 습 니 다" 라 는 명령 만 내 려 야 합 니 다.그들 은 자연히 그 목록 을 만 들 것 이다. 너 는 직접 세입 자 와 접촉 할 필요 가 없다.

    좋은 웹페이지 즐겨찾기