美文网首页
es6实现设计模式之观察者模式

es6实现设计模式之观察者模式

作者: OnePiece索隆 | 来源:发表于2018-11-24 17:27 被阅读0次
class Observer {
      constructor(fns) {
        this.fns = fns || [];
      }
      //订阅
      subscribe(fn) {
        this.fns.push(fn);
      }
      // 取消订阅
      unsubscribe(fn) {
        this.fns = this.fns.filter((el) => {
          return el !== fn;
        });
      }
      // 发射
      update(o) {
        this.fns.forEach((fn) => {
          fn(o);
        })
      }
    }
    //测试
    var o = new Observer;
    var f1 = function (data) {
      console.log('Robbin: ' + data + ', 赶紧干活了!');
    };

    var f2 = function (data) {
      console.log('Randall: ' + data + ', 找他加点工资去!');
    };

    o.subscribe(f1);
    o.subscribe(f2);

    o.update("Tom回来了!", '666'); 
    //Robbin: Tom回来了!, 赶紧干活了! 
    //Randall: Tom回来了!, 找他加点工资去!

    //退订f1
    o.unsubscribe(f1);
    //再来验证
    o.update("Tom回来了!"); // Randall: Tom回来了!, 找他加点工资去!
    o.unsubscribe(f2);
    o.update("Tom回来了!"); // 无打印,因为取消了所有的订阅

参考文章:汤姆大叔

相关文章

网友评论

      本文标题:es6实现设计模式之观察者模式

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