2018-06-13 设计模式 观察者

观察者模式分为两个对象订阅者和发布者,订阅者可以有多个,原理就是发布者将订阅者的对象指针保存下来,如果有消息了需要通知了,那么发布者遍历订阅者的对象,然后分别调用他们的方法,将值传过去.

例子:

// 创建发布者

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('发布了') // 调用发送方法

你可能感兴趣的:(2018-06-13 设计模式 观察者)