一、实现观察者模式需要三个对象
1、观察者,主要寄宿在发行商对象上,一般不会单独使用
2、发行商,用于发布消息的对象
3、订阅者,接收通知的对象
二、观察者对象应该具有的方法和属性
1.由回调函数构成的订阅者数组
2.用于添加和删除订阅者的addSubscriber()和removeSubscriber()方法。
3.publish()方法,发布消息
4.make()方法,将任意对象转变为一个发行商并为其添加上述方法(即,将观察者寄宿在发行商)
var observer = { addSubscriber: function (callback) { this.subscribers[this.subscribers.length] = callback; }, removeSubscriber: function (callback) { for (var i = 0; i < this.subscribers.length; i++) { if (this.subscribers[i] === callback) { delete (this.subscribers[i]); } } }, publish: function (what) { for (var i = 0; i < this.subscribers.length; i++) { if (typeof this.subscribers[i] === 'function') { this.subscribers[i](what); } } }, make: function (o) { for (var i in this) { o[i] = this[i]; o.subscribers = []; } } }
三、发行商 (任意一个对象)
var blogger = { writeBlogPost: function () { var content = 'Today is ' + new Date(); this.publish(content); } }; observer.make(blogger);
四、观察者
var jack = { read: function (what) { console.log("I read " + what); } }; var bill = { read: function (what) { Console.log("bill read" + what); } }; blogger.addSubscriber(jack.read); blogger.addSubscriber(bill.read);
五、发布消息
blogger.writeBlogPost(); //取消订阅 //blogger.removeSubscriber(bill.read);