javaScript 디자인 모드: Observer (관찰자) 모드 실천 (1)
디자인 모델 은 소프트웨어 디자인 에서 흔히 볼 수 있 는 문 제 를 해결 하 는 재 활용 방안 으로서 우리 가 소프트웨어 개발 에서 흔히 볼 수 있 는 문 제 를 해결 하 는 데 매우 중요 한 참고 가 되 었 다. 전단 개발 에서 자주 사용 하 는 디자인 모델 을 이해 하고 파악 하 는 것 은 우리 의 일상적인 개발 에 도움 이 될 것 이다.
Oberver 모드 가 무엇 입 니까?
라 는 책 에서 관찰자 모델 에 대해 다음 과 같이 설명 했다. 한 명 또는 여러 명의 관찰자 가 목표 의 상태 에 관심 이 있다. 그들 은 자신 을 목표 대상 에 의존 하여 관심 이 있 는 모든 내용 을 등록 하고 목표 상태 가 바 뀌 며 관찰자 가 이러한 관심 변경 에 관심 이 있 을 수 있다.모든 관찰자 의 업데이트 방법 을 호출 하 는 알림 메 시 지 를 보 냅 니 다.관찰자 가 내용 에 흥 미 를 느끼 지 않 으 면 그 는 간단하게 그 중에서 분리 할 수 있다.
개념 적 인 것 은 사람 을 귀 찮 게 하 는 작은 요정 이다. 딱딱 한 말 을 많이 했 지만 아직도 어리둥절 한 상태 다....................................................좋아, 정리 해 보 자.
쉽게 말 하면 Observer (관찰자) 모델 은 대상 간 의 다 중 의존 관 계 를 정의 한다.대상 의 상태 가 바 뀌 었 을 때, 그 대상 에 의존 하 는 모든 대상 이 알림 을 받 고 자동 으로 업데이트 되 거나 삭 제 됩 니 다.이런 의존 통 지 는 본질 적 으로 연동 이 촉발 한 결과 이다.
응...아마도 당신 은 "말 이 일리 가 있 습 니 다. 무슨 말 을 했 는 지 모 르 겠 지만..." 라 고 말 할 것 입 니 다.
좋아,
talk is cheap, let me show you the code
이 말 을 코드 로 바 꿔 볼 게...Observe (관찰자) 추상 적 서비스의 간단 한 실현
관찰자 가 있 는 이상 반드시 피 관찰자 가 있 을 것 이다. 앞에서 우리 가 언급 한 바 와 같이 관찰자 와 피 관찰자 간 의 정보 방송 체 제 는 본질 적 으로 연동 촉발 의 결과 이 고 관찰자 와 피 관찰자 간 은 한 쌍 의 다 중 관계 이다. 이런 관 계 를 실현 하기 위해 우 리 는 먼저 몇 개의 명 사 를 알 아야 한다.
우선, 저 희 는 Subject 류 를 실현 합 니 다. 이 는 세 가지 방법 을 제공 합 니 다. 각각 관찰 자 를 추가 하고 관찰 자 를 삭제 하 며 등 록 된 관찰자 에 게 업 데 이 트 를 알 리 는 것 입 니 다.
var Subject = function () {
//
this.observers = [];
};
Subject.prototype = {
//
add: function (observer) {
this.observers.push(observer);
},
//
remove: function (observer) {
for (var i = 0, len = this.observers.length; i < len; i++) {
if (observer = this.observers[i]) {
this.observers.splice(i, 1);
return true;
}
}
return false;
},
//
update: function () {
var observer;
for (var i = 0, len = this.observers.length; i < len; i++) {
observer = this.observers[i];
observer.update(this);
}
}
};
다음은 observer 클래스 를 실현 합 니 다. update 업데이트 방법 을 제공 합 니 다.
var Observer = function () {};
Observer.prototype.update = function (data) {
//
console.log(`observer update ${data}`)
};
이렇게 해서 우 리 는 추상 적 인 차원 에서 관찰자 모델 의 초기 형 태 를 간단하게 실현 했다. 바 우 트, 이것 이 무슨 소 용이 있 을 까? 마치 우 리 는 그것 이 실제 코드 에서 어떻게 나타 나 는 지 모 르 는 것 같다.
Observer (관찰자) 구체 적 인 사례 실현
우 리 는 신문 을 구독 하 는 전형 적 인 사례 로 관찰자 모델 의 코드 응용 을 실천 한다.
이 사례 에서 출판 사 는 피 관찰자 에 해당 하고 목표 대상 에 속 하 며 독 자 는 신문 을 구독 하고 신문사 신문 이 업 데 이 트 된 후에 신문 을 구독 하 는 독자 에 게 업데이트 내용 을 자동 으로 알려 야 한다.
우선 테마 대상 구현:
function Subject() {
this.readers = [];
}
Subject.prototype = {
// ,
add: function (reader) {
this.readers.push(reader);
},
remove: function (reader) {
for (var i = 0, len = this.readers.length; i < len; i++) {
if (reader === this.readers[i]) {
this.readers.splice(i, 1);
return;
}
}
},
update: function (content) {
for (var i = 0, len = this.readers.length; i < len; i++) {
this.readers[i].update(content);
}
}
};
// ,
function Paper() {
Paper.super.constructor.call(this);
this.content = '';
}
Object.assign(Paper, Subject);
//
Paper.prototype.getContent = function () {
return this.content;
};
//
Paper.prototype.setContent = function (content) {
this.content = content;
//
this.update(content);
};
다음, observer 관련 실현:
//
function Observer() {}
Observer.prototype.update = function () {};
function Reader() {
this.name = '';
}
Object.assign(Reader, Observer);
Reader.prototype.update = function (content) {
// ,
console.log(this.name + 'update:' + content);
};
마지막 으로 신문 업 데 이 트 를 촉발 합 니 다.
//
var subject = new Paper();
var reader1 = new Reader();
reader1.name = 'zhangsan';
var reader2 = new Reader();
reader2.name = 'lisi';
subject.add(reader1);
subject.add(reader2);
subject.setContent(' ');
코드 에서 먼저 저 희 는 Subject 류 를 정 의 했 습 니 다. 이 는 독자 (관찰자) 에 대한 등록, 삭제 와 업데이트 이 벤트 를 제공 하고 구체 적 인 주제 인 ConcreateSubject 모델 Paper 를 정 의 했 습 니 다. Subject 를 실현 하 는 방법 외 에 자신의 setContent 와 getContent 두 가지 사용자 정의 방법 을 정의 하여 구체 적 인 목표 의 변경 을 촉발 합 니 다.
그 다음 에 우 리 는 관찰자 Observer 와 독자 Reader 류 를 정 의 했 고 Reaer 는 Observer 의 업데이트 방법 Update 를 실 현 했 으 며 자신의 name 속성 을 제외 하고 독자 가 자신의 방법 이나 속성 치 를 정의 하 는 데 편리 하도록 노출 했다.
코드 실행 단계 에서 우 리 는 먼저 paper 대상 과 독자 집 을 예화 시 켰 고 독 자 를 subject 에 등록 시 켜 독자 의 구독 을 표시 했다. 그러면 구체 적 인 신문 내용 이 업 데 이 트 된 후에
subject.setContent(' ')
, 즉 신문 이 업 데 이 트 된 후에 신문 을 구독 하 는 두 독 자 는 자동 으로 업 데 이 트 된 내용 을 받 게 된다.관찰자 모드 의 장단 점
단점
최종 총화
디자인 모델 은 소프트웨어 디자인 에서 흔히 볼 수 있 는 문 제 를 해결 하 는 재 활용 방안 으로 많은 개발 자 들 이 정리 한 경험 이다. 우 리 는 이런 모델 을 참고 하여 개발 에서 까다 로 운 문 제 를 해결 할 수 있다.
본 장 에서 우 리 는 코드 의 측면 에서 간단 한 관찰자 모델 을 실현 하 는 데 중심 을 두 었 다. 그러나 이것 은 완전 하지 않다. 실제로 관찰자 모델 의 모델 은 밀 당, 당 김 두 가지 모델 로 나 눌 수 있다. 본 고 에서 우 리 는 밀 당 모델 만 가지 고 관찰자 모델 을 이해 하 는 사례 로 삼 는 다.
다음 절 은 관찰자 의 또 다른 '당 김 모델' 의 실현 에 중심 을 두 고 소개 할 것 이다.
이 시대 에 우 리 는 거인 의 어깨 위 에 서서 절차 세계 의 웅장 한 장관 을 엿 볼 수 있 게 해 주 셔 서 감사합니다. 나 는 적자 심 으로 절차 세계 의 수많은 산 과 물 을 밟 고 싶 습 니 다!프로그램 세 계 를 걷 는 모든 동인 들 이 마음속 으로 원 하 는 모습 으로 살 기 를 바 랍 니 다. 화 이 팅!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.