首页 > 编程语言 > 详细

JavaScript实现观察者模式

时间:2019-02-25 22:27:54      阅读:134      评论:0      收藏:0      [点我收藏+]

首先:

观察者模式是软件设计模式的一种,它???叫做发布订阅模式,它定义了一种一对多的关系,让多个观察者对象同时监听一个主题对象,这个主题对象的状态发生改变时就会通知所有观察者对象。它是由两类对象组成:主题和观察者,主题负责发布事件,同时观察者通过订阅这些事件来观察该主题,发布者和订阅者是完全解耦的,彼此不知道对方的存在,两者仅仅共享一个自定义事件的名称。

在Js中事件监听机制就可以理解为一种观察者模式,通过onclick进行事件绑定,然后通过交互行为进行触发或者事件主动触发。

下面给出一个Js自定义的PubSub,

定义观察者类PubSub

  function Pubsub(){
        this.handles={}
    }

实现事件订阅on

  on:function (type,handle){
        if(!this.handles[type]){
            this.handles[type]=[]
        }
        this.handles[type].push(handle);
    }
    

 实现事件发布emit

  emit:function(){
        var type=Array.prototype.shift.call(arguments);
        if(!this.handles[type]){
            return false;
        }
        for(var i=0;i<this.handles[type].length;i++){
            var handle=this.handles[type][i];
            handle.apply(this,arguments);
        }
    }

//Array.prototype.shift.call(arguments), arguments对象是function的内置对象,可以获取到调用该方法时传入的实参数组

shift方法取出数组中的第一个参数,就是type类型

实现事件取消订阅off

off:function(type,handle){
      handles=this.handles[type];
      if(handles){
          if(!handle){
              handles.length=0;  //清空数组
          }
      }
      else{
          for(var i=0;i<handles.length;i++){
              var _handle=handles[i];
        if(_handle===handle){
            handles.splice(i,1);
        }
          }
      }
    }

 

JavaScript实现观察者模式

原文:https://www.cnblogs.com/yuan233/p/10434242.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!