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库.
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