观察者模式分为两个对象订阅者和发布者,订阅者可以有多个,原理就是发布者将订阅者的对象指针保存下来,如果有消息了需要通知了,那么发布者遍历订阅者的对象,然后分别调用他们的方法,将值传过去.
例子:
// 创建发布者
function Publisher(){
var observice = [] // 发布者内部定义一个属性,用于存储订阅者对象的指针
}
Publisher.prototype.add = function (observice) { // 发布者定义一个方法向自身的属性中添加订阅者
var flag = false
this.observice.map(function (item) {
if (item === observice) {
flag = true
}
})
if (!flag) {
this.observice.push(observice)
}
}
Publisher.prototype.send = function (state) { // 发布者发布消息
this.observice.map(function (item) {
item.update(item)
})
return this
}
而对于订阅者来说,只需要实现update方法即可,例子如下:
function Subscriber(){}
Subscriber.prototype.update = function (event) {}
使用如下:
var p = new Publisher()
var s1 = new Subscriber()
s1.update = function () {} // 根据需要重写update方法
p.add(s1) // 将s1添加到发布者的存储列表中
s1.send('发布了') // 调用发送方法
网友评论