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

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 工厂模式类似于现实生活中的工厂可以产生大量相似的商品,去做同样的事情,实现同样的效果;这时候需要使用工厂模式。简单...
    舟渔行舟阅读 12,413评论 2 17
  • 单例模式 适用场景:可能会在场景中使用到对象,但只有一个实例,加载时并不主动创建,需要时才创建 最常见的单例模式,...
    Obeing阅读 6,579评论 1 10
  • 面向对象编程 1.创建,使用函数 var CheckObject = {checkName : function(...
    依米花1993阅读 3,068评论 0 0
  • Lua 5.1 参考手册 by Roberto Ierusalimschy, Luiz Henrique de F...
    苏黎九歌阅读 14,759评论 0 38
  • 一夜悄然覆地来,万户启扉映眼白。 盼君何故迟姗姗,落雪依旧喜盈怀。 __...
    秋英焕焕阅读 3,287评论 0 2

友情链接更多精彩内容