美文网首页
javascript设计模式——观察者模式

javascript设计模式——观察者模式

作者: 蟹老板爱写代码 | 来源:发表于2018-04-03 11:31 被阅读0次

观察者模式:又称作发布-订阅者模式,定义了一种依赖关系,解决了主体对象与观察者之间功能的耦合。

代码::定义观察者类,实现事件的监听,触发和取消。

  // 定义观察者类
    var Observer = (function(){
      var _messages = []
      return {
        // 注册信息接口
        regist: function(type, fn){
          // 事件如果没注册,初始化事件队列,否则push到队列中
          if (typeof _messages[type] === 'undefined') {
            _messages[type] = [fn]
          } else {
            _messages[type].push(fn)
          }
        },
        // 发布信息接口
        fire: function(type, args){
          // 该消息没有注册,结束
          if (!_messages[type]) {
            return
          }
          var events = {
            type: type,
            args: args || {}
          },
          i = 0,
          len = _messages[type].length
          for(;i<len;i++) {
            _messages[type][i].call(this, events)
          }
        },
        // 移除信息接口
        remove: function(type, fn){
          if (_messages[type] instanceof Array) {
            var  i = _messages[type].length - 1
            for(; i >= 0; i--) {
              _messages[type][i] === fn && _messages[type].splice(i, 1)
            }
          }
        }
      }
    })()
    // 例子:你来学校上学,课堂上有老师和学生,老师向学生提问,学生是提问对象,因此他们是订阅者,同时学生也有对问题的思考和回答问题的动作
    var Student = function(result) {
      var that = this
      that.result = result
      that.say = function(){
        console.log(that.result)
      }
    }
    Student.prototype.answer = function(question){
      Observer.regist(question, this.say)
    }
    // 学生在睡觉,不能回答问题
    Student.prototype.sleep = function(question){
      Observer.remove(question, this.say)
    }

    var Teacher = function(){}
    Teacher.prototype.ask = function(question){
      console.log('问题是:' + question)
      Observer.fire(question)
    }

    var student1 = new Student('学生1回答问题')
    var student2 = new Student('学生2回答问题')
    var student3 = new Student('学生3回答问题')

    student1.answer('什么是设计模式')
    student1.answer('简述观察者模式')
    student2.answer('什么是设计模式')
    student3.answer('什么是设计模式')
    student3.answer('简述观察者模式')
    student3.sleep('简述观察者模式')

    var teacher = new Teacher()
    teacher.ask('什么是设计模式')
    teacher.ask('简述观察者模式')

相关文章

  • 观察者模式js实现

    参看书籍JavaScript模式第七章设计模式我的理解:观察者模式又叫订阅/发布模式。被观察者(发布者)内部需要有...

  • 观察者设计模式

    每周学点Java设计模式__观察者设计模式 本次继续更新java23中设计模式之一——观察者模式。 观察者模式(有...

  • JavaScript设计模式六(发布-订阅模式)

    JavaScript设计模式六(发布-订阅模式) 发布-订阅模式又叫做观察者模式,定义: 定义对象间的一种一对多的...

  • Javascript单例模式概念与实例

    前言 和其他编程语言一样,Javascript同样拥有着很多种设计模式,比如单例模式、代理模式、观察者模式等,熟练...

  • RxJava基础—观察者模式

    设计模式-观察者模式 观察者模式:观察者模式(有时又被称为发布(publish )-订阅(Subscribe)模式...

  • 设计模式02-观察者者设计模式

    [toc] 设计模式02-观察者者设计模式 主要来源Head First设计模式(书)观察者设计模式是JDK中使用...

  • 11.9设计模式-观察者模式-详解

    设计模式-观察者模式 观察者模式详解 观察者模式在android中的实际运用 1.观察者模式详解 2.观察者模式在...

  • 设计模式

    工厂模式观察者设计模式instance ofdwr框架Dojo是一个用javascript语言实现的开源DHTML...

  • 17.第四篇:观察者模式

    本文摘自 《JavaScript 设计模式》张容铭 著 版权归原作者所有 观察者模式:又被称作发布-订阅者模式或消...

  • RxJava设计模式与原理

    标准观察者设计模式 RxJava是一种特殊的观察者模式,首先我们先来看标准的观察者设计模式。在标准观察者模式中,存...

网友评论

      本文标题:javascript设计模式——观察者模式

      本文链接:https://www.haomeiwen.com/subject/vkeqhftx.html