【发布时间】:2019-04-26 04:58:07
【问题描述】:
我刚刚开始了解观察者模式的工作原理。但现在我想用它。我看到了很多观察者模式的例子,但大多数只是简单地演示了该模式,并没有展示它是为了完成任务而实现的。
我了解观察者会收到主题的通知。但是,我怎样才能让观察者做一些事情呢?
下面的代码是一个常见的观察者模式程序。我看到它在通知观察者时执行 console.log (console.log("Observer " + number + " is notified!");)。这是我可以返回其他东西的地方吗:值、函数调用等?
我已经看到了具有简单数学计算的可视化示例,当观察者收到通知时会更新计算(即成本 + 税收 = 总计)。但我找不到一个例子来说明代码是如何发生这种情况的。 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();
【问题讨论】:
标签: javascript observer-pattern