JavaScript 중개자 모드 와 관찰자 모드 는 어떻게 다 릅 니까?
4934 단어 JavaScript
두 사람 이 매우 비슷 하 다 고 생각 합 니 다. 모두 pub / sub 체제 인 데 어떻게 구분 합 니까?각각 어떤 다른 장면 에서 응용 합 니까?
GoF 의 원문 에서 관찰자 모델 을 이렇게 묘사 했다.
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 에서 중개 모듈 은 유지 가능성 을 높 일 수 있 습 니 다. 어떤 모듈 을 시작 할 지, 어떤 모듈 을 시작 할 수 있 는 권한 이 있 는 지, 다른 모듈 을 불 러 올 수 있 는 권한 이 있 는 지, 모듈 간 의의존 관계, 일부 모듈 이 작 동 에 실패 하면 어떻게 합 니까? 이러한 경계 조건 은 모두 그것 에 게 맡 겨 판단 할 수 있 습 니 다. 다른 모듈 은 자신의 논 리 를 실현 하 는 데 만 관심 을 가 졌 으 면 좋 겠 습 니 다. 마지막 으로 예 를 들 어 중개 모듈 은 정말 부동산 중개인 과 같 습 니 다. 만약 당신 이 집주인 이 라면 "나 는 사람 을 찾 아 집 을 세 내 겠 습 니 다" 라 는 명령 만 내 려 야 합 니 다.그들 은 자연히 그 목록 을 만 들 것 이다. 너 는 직접 세입 자 와 접촉 할 필요 가 없다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
기초 정리 - 1문자 (String) 숫자 (Number) 불린 (Boolean) null undefined 심볼 (Symbol) 큰정수 (BigInt) 따옴표로 묶어 있어야 함 Not-A-Number - 숫자 데이터 / 숫자로 표...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.