(☆来分期客服电话☆)

设计模式之观察者模式
介绍

观察者模式是软件设计模式的一种。在此种模式中,一个目标对象维持一系列依赖于它(观察者)的对象,将有关状态的任何更新自动通知给他们。

观察者设计模式定义了对象间的一种一对多的依赖关系,以便一个对象的状态发生变化时,所有依赖于它的对象都得到通知并自动刷新。

使用观察者模式的好处:

1、支持简单的广播通信,自动通知所有已经订阅过的对象。方便各种状态的管理。

2、页面载入后目标对象很容易与观察者存在一种动态关联,增加了灵活性。

3、目标对象与观察者之间的抽象耦合关系能够单独扩展以及重用。

实现方式

观察者模式有很多实现方式,从根本上说,该模式必须包含两个角色:观察者和目标。目标和观察者是基类,目标提供维护观察者的一系列方法,观察者提供更新接口。具体观察者和具体目标继承各自的基类,然后具体观察者把自己注册到具体目标里,在具体目标发生变化时候,调度观察者的更新方法。

if (!Array.prototype.forEach) {
    Array.prototype.forEach = function (fn, thisObj) {
        var scope = thisObj || window;
        for (var i = 0, j = this.length; i < j; ++i) {
            fn.call(scope, this[i], i, this);
        }
    };
  }
  if (!Array.prototype.filter) {
    Array.prototype.filter = function (fn, thisObj) {
        var scope = thisObj || window;
        var a = [];
        for (var i = 0, j = this.length; i < j; ++i) {
            if (!fn.call(scope, this[i], i, this)) {
                continue;
            }
            a.push(this[i]);
        }
        return a;
    };
  }

  //扩展函数扩展对象
  function extend(obj, extension){
    for(var key in obj){
      extension[key] = obj[key]
    }
  }

   //观察者目标
   function ObserverSubject(){
    this.observerList = [];
   }

   ObserverSubject.prototype.addObserver = function(observer){
     this.observerList.push(observer)
   };

   ObserverSubject.prototype.removeObserver = function(observer){
    this.observerList = this.observerList.filter(function(el) {
      return el !== observer
    });
   }

    ObserverSubject.prototype.notify = function(context){
      this.observerList.forEach(function(el, index) {
        el.update(context)
      });
    }

   //观察者对象
   function Observer() {
    this.update = function(content){

    }
   }


   var observerSubjectIns = {};

   extend(new ObserverSubject(),observerSubjectIns)

   var ob1 = new Observer();

  ob1.update = function(content){
    console.log('ob1 收到通知:' + content)
  }

   var ob2 = new Observer();

  ob2.update = function(content){
    console.log('ob2 收到通知:' + content)
  }

  observerSubjectIns.addObserver(ob1);
  observerSubjectIns.addObserver(ob2);
  observerSubjectIns.notify('吃饭');

  observerSubjectIns.removeObserver(ob2);
  observerSubjectIns.notify('吃饭');

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值