1. 程式人生 > >JS 設計模式八 -- 發布訂閱者模式

JS 設計模式八 -- 發布訂閱者模式

ret 實現 耦合 通知 this ray [] strong pro

概念

發布---訂閱模式又叫觀察者模式,它定義了對象間的一種一對多(一個發布,多個觀察)的關系,讓多個觀察者對象同時監聽某一個主題對象,當一個對象發生改變時,所有依賴於它的對象都將得到通知。

優點

1、支持簡單的廣播通信,當對象狀態發生改變時,會自動通知已經訂閱過的對象。

2、發布者與訂閱者耦合性降低

缺點

創建訂閱者需要消耗一定的時間和內存。

如果過度使用的話,反而使代碼不好理解及代碼不好維護。

代碼實現

var Event = (function(){
    var list = {}, // 緩存訂閱者列表
          listen,   // 訂閱
          trigger,  // 發布訂閱
          remove;   // 移除訂閱
          listen 
= function(key,fn){ if(!list[key]) { list[key] = []; } list[key].push(fn); }; trigger = function(){ var key = Array.prototype.shift.call(arguments), fns = list[key]; if(!fns || fns.length === 0) {
return false; } for(var i = 0, fn; fn = fns[i++];) { fn.apply(this,arguments); } }; remove = function(key,fn){ var fns = list[key]; if(!fns) { return false; }
if(!fn) { fns && (fns.length = 0); }else { for(var i = fns.length - 1; i >= 0; i--){ var _fn = fns[i]; if(_fn === fn) { fns.splice(i,1); } } } }; return { listen: listen, trigger: trigger, remove: remove } })(); // 訂閱: Event.listen("color",function(size) { console.log("尺碼為:"+size); // 打印出尺碼為42 });

// 發布 Event.trigger(
"color",42);

JS 設計模式八 -- 發布訂閱者模式