Javascript 디자인 모드 의 관찰자 모드 (추천)
1. 관찰자 모드 란 무엇 인가
관찰자 모드 는 게시 - 구독 모드 라 고도 부 르 는데 관찰자 모드 에서 한 관찰자 가 모든 목 표를 관리 하고 상태 가 바 뀔 때 알림 을 보 낼 수 있다.(사실 sql server 의 게시 구독 도 이 렇 습 니 다)
2. 통속 적 인 해석
만약 에 예전 에 마을 의 방송 이 관찰자 라면 모든 마을 사람들 이 관찰 대상 이 었 다. 만약 에 마을 에 통지 가 있 으 면 정책 이 바 뀌 었 을 때 방송 을 통 해 이 소식 을 발표 해 야 한다. 직접 한 집 이 달 려 가서 통 지 를 하지 않 아 도 된다.
3. 코드
var observer = {//
villagers: [],//
addVillager: function (callback) {//
this.villagers[this.villagers.length] = callback;
},
removeVillager: function (callback) {//
for (var i = 0; i < this.villagers.length; i++) {
if (this.villagers[i] === callback) {
delete this.villagers[i];
}
}
},
publish: function (info) {//
for (var i = 0; i < this.villagers.length; i++) {
if (typeof this.villagers[i] === 'function') {
this.villagers[i](info);
}
}
},
make: function (o) {//
for (var i in this) {
o[i] = this[i];
}
}
};
var village1 = {};
observer.make(village1);// 1
var villager11 = {
read: function (what) {
console.log(' :' + what);
}
};
var villager12 = {
read: function (what) {
console.log(' :'+what);
}
};
village1.addVillager(villager11.read);
village1.addVillager(villager12.read);
village1.publish(' !!!');
village1.removeVillager(villager11.read);
village1.publish(' !!!');
/* var village2 = {
myAddVillager:function(callback){
this.addVillager(callback);
},
myRemoveVillager:function(callback){
this.removeVillager(callback);
},
myPublish:function(info){
this.publish(info);
}
};
observer.make(village2);// 1
var villager21 = {
read: function (what) {
console.log(' :' + what);
}
};
var villager22 = {
read: function (what) {
console.log(' :'+what);
}
};
village2.myAddVillager(villager21.read);
village2.myAddVillager(villager22.read);
village2.myPublish(' !!!');*/
여기까지 썼 습 니 다. 관찰자 모드 가 실현 되 었 지만 여러 마을 이 이런 모델 을 필요 로 할 수도 있 습 니 다. 그러면 우 리 는 observer 를 구조 함수 로 개조 하 는 방식 입 니 다.
function Observer(){// , ,
if(!(this instanceof Observer)){
return new Observer();
}
this.villagers = [];
};
Observer.prototype = {
// villagers: [],//
addVillager: function (callback) {//
this.villagers[this.villagers.length] = callback;
},
removeVillager: function (callback) {//
for (var i = 0; i < this.villagers.length; i++) {
if (this.villagers[i] === callback) {
delete this.villagers[i];
}
}
},
publish: function (info) {//
for (var i = 0; i < this.villagers.length; i++) {
if (typeof this.villagers[i] === 'function') {
this.villagers[i](info);
}
}
},
make: function (o) {//
for (var i in this) {
o[i] = this[i];
}
}
}
var village1 = {};
var observer1 = new Observer();
observer1.make(village1);// 1
var villager11 = {
read: function (what) {
console.log(' :' + what);
}
};
var villager12 = {
read: function (what) {
console.log(' :'+what);
}
};
village1.addVillager(villager11.read);
village1.addVillager(villager12.read);
village1.publish(' !!!');
village1.removeVillager(villager11.read);
village1.publish(' !!!');
var village2 = {
myAddVillager:function(callback){
this.addVillager(callback);
},
myRemoveVillager:function(callback){
this.removeVillager(callback);
},
myPublish:function(info){
this.publish(info);
}
};
var observer2 = new Observer();
observer2.make(village2);// 1
var villager21 = {
read: function (what) {
console.log(' :' + what);
}
};
var villager22 = {
read: function (what) {
console.log(' :'+what);
}
};
village2.myAddVillager(villager21.read);
village2.myAddVillager(villager22.read);
village2.myPublish(' !!!');
자 바스 크 립 트 디자인 모델 에 대한 관찰자 모델 소 편 은 여기까지 소개 해 드 리 겠 습 니 다. 도움 이 되 셨 으 면 좋 겠 습 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.