구독자 모드와 관찰자 모드 발표

5449 단어
1. 게시 구독자 모드
// 
var pubsub={};
(function(pubsub){
  var topics={};
  pubsub.publish=function(topic){
    //
    if(!topics[topic]){
      // 
      return;
    }
    var funs = topics[topic];
    funs.forEach(function(fun){
      var count = 6;
      var timer = setInterval(function(){
        fun(count--);
        if(count==0){
          clearInterval(timer);
        }
      },1000);
      
    });
  }
  pubsub.subscribe=function(topic,fun){
    console.info(' ');
    if(!topics[topic]){
      topics[topic] = [fun];
    }else{
      topics[topic].push(fun);
    }
  }
})(pubsub);

function dinner(){
  pubsub.subscribe('dinner',function(data){
     console.info(` ${data} `);
  });
   pubsub.publish('dinner');
}

2. 관찰자 모드
// 
// , ,dinner 
// List, , 
function Resturant(){
  // 
  this.list = new List();
  this.addDinner = function(dinner){
     // 
     this.list.add(dinner);
  }
  this.notify = function(){
    this.list.get().forEach(function(dinner){
      dinner.update();
    });
  }
}

function List(){
  this.list=[];
  this.add = function(dinner){
    this.list.push(dinner);
  }
  this.get = function(){
    return this.list;
  }
}

function Dinner(number){
  this.update=function(){
    console.info(` `);
  }
}

var dinner1 = new Dinner(1);
var dinner2 = new Dinner(2);

var resturant = new Resturant();
resturant.addDinner(dinner1);
resturant.addDinner(dinner2);
resturant.notify();

게시 구독자와 관찰자 모델 간의 차이
1. 관찰자 모드는 관찰자 자신(대상)을 메시지 대기열에 등록하고 메시지 변동이 있을 때 관찰자의 업데이트 함수를 업데이트해야 한다

좋은 웹페이지 즐겨찾기