JavaScript设计模式之观察者模式

发布者和订阅者之间松耦合(发布者直接通知订阅者)
在这里插入图片描述
适用场景:一个地方发生了更改,通知其他好几个地方进行相应的更改,多用于应用内部。

  1. ES5实现方式
   var Subject = function () {
     this.observers = []
   }
   Subject.prototype.addObserver = function(observer) {
     this.observers.push(observer)
   }
   Subject.prototype.removeObserver = function(observer) {
     var index = this.observers.indexOf(observer)
     index > -1 && this.observers.splice(index, 1)
   }
   Subject.prototype.notify = function() {
     this.observers.forEach(function(item, index) {
       item.update()
     })
   }

   var Observer = function(name) {
     this.name = name
   }
   Observer.prototype.update = function() {
     console.log(this.name + 'update....')
   }

   var subject = new Subject()
   var observer1 = new Observer('订阅者1号')
   subject.addObserver(observer1)
   var observer2 = new Observer('订阅者2号')
   subject.addObserver(observer2)
   subject.notify()
   subject.removeObserver(observer1)
   subject.notify()
  1. ES6实现方式
   class Subject {
     constructor() {
       this.observers = [];
     }
     addObserver(observer) {
       this.observers.push(observer);
     }
     removeObserver(observer) {
       let index = this.observers.indexOf(observer);
       index > -1 && this.observers.splice(index, 1);
     }
     notify() {
       this.observers.forEach(observer => observer.update());
     }
   }

   class Observer {
     constructor(name) {
       this.name = name;
     }
     update() {
       console.log(this.name + "update....");
     }
     subscribeTo(subject) {
       subject.addObserver(this);
     }
   }
   var subject = new Subject();
   var observer1 = new Observer("订阅者1号");
   observer1.subscribeTo(subject);
   subject.notify();
   subject.removeObserver(observer1);
   subject.notify();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值