编程语言
首页 > 编程语言> > javascript-如何使用观察者模式?

javascript-如何使用观察者模式?

作者:互联网

我才刚刚开始了解观察者模式的工作原理.但是现在我想使用它.我看到了很多观察者模式的示例,但大多数只是简单地演示了该模式,而没有显示其已完成以完成任务.

我了解观察者会被某个主题通知.但是,我怎样才能使观察者做某事呢?

下面的代码是一个常见的Observer Pattern程序.我看到它在通知观察者时执行console.log(console.log(“ Observer”号“已通知!“);).我是否可以在这里返回其他内容:值,函数调用等?

我看过带有简单数学运算的可视示例,这些可视示例会在通知观察者时更新计算(即,成本税=总计).但是我找不到一个示例来说明代码是如何实现的. 1.如何/在何处返回新成本; 2.因此,观察者(一个函数?)被告知成本已发生变化;该功能如何/在何处接收更新的费用?

我是新手,模式本身有点令人困惑.我希望看到一个超级基本的示例程序.

var Subject = function() {
  let observers = [];

  return {
    subscribeObserver: function(observer) {
      observers.push(observer);
    },
    unsubscribeObserver: function(observer) {
      var index = observers.indexOf(observer);
      if(index > -1) {
        observers.splice(index, 1);
      }
    },
    notifyObserver: function(observer) {
      var index = observers.indexOf(observer);
      if(index > -1) {
        observers[index].notify(index);
      }
    },
    notifyAllObservers: function() {
      for(var i = 0; i < observers.length; i++){
        observers[i].notify(i);
      };
    }
  };
};

var Observer = function(number) {
  return {
    notify: function() {
      console.log("Observer " + number + " is notified!");
    }
  }
}

var subject = new Subject();

var observer1 = new Observer(1);
var observer2 = new Observer(2);

subject.subscribeObserver(observer1);
subject.subscribeObserver(observer2);

subject.notifyObserver(observer2);
subject.unsubscribeObserver(observer2);

subject.notifyAllObservers();

解决方法:

只需使用RxJs库.

https://www.learnrxjs.io/

const { Subject } = rxjs;

const subject$= new Subject();

subject$.subscribe(val => { console.log(val); });

subject$.next('Hello');
<script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/6.5.1/rxjs.umd.min.js"></script>

标签:observer-pattern,javascript
来源: https://codeday.me/bug/20191108/2005590.html