2012年7月4日 星期三

[JavaScript] Observer Pattern Implement

上一篇講到簡單的observer Pattern的作法,這一篇我們把它寫成一個class
//Observer class
function Observer() {
  var topics = [];
   
   return{
    Register:function( topic, func ) {
        if(!topics[topic])
         topics[topic]=[]; // two dimension for store callback func
        topics[topic].push(func);
    },
    
    Publish:function( topic, args ) {
        if ( !topics[topic] ) {
            console.log('no such topic');
            return false;
        }
        var subscribers = topics[topic];
        for(var i in subscribers)
         subscribers[i](topic,args);
    },
    
    UnRegister:function( topic ) {
        if ( !topics[topic] ) {
            return false;
        }
        topics[topic]=null;
    }
   }
};
如何使用呢?
//How to use
var observ = new  Observer();
 
 //call back signature (topic,data)
 var testHandler = function (topics, data) {
    console.log("1:"+topics + ": " + data);
 };
 var testHandler2 = function (topics, data) {
    console.log("2:"+topics + ": " + data);
 };
 
 observ.Register('cal1', testHandler);
 observ.Register('cal1', testHandler2);
 observ.Publish('cal1', 'hello world!');
 observ.Publish('cal1', ['test', 'a', 'b', 'c']);
 
 observ.UnRegister('example1');
 
 observ.Publish('example1', 'hello world!');

------------------
執行結果如下


沒想到使用Javascript寫一個Observer Pattern會如此簡單 ....

沒有留言: