我刚刚开始理解观察者模式是如何工作的。但现在我想用它。我看到了许多关于观察者模式的例子,但大多数例子只是简单地演示了该模式,并且没有显示它是为完成任务而实现的。
据我所知,观察者会收到被调查对象的通知。但是,我怎样才能让观察者做一些事情呢?
下面的代码是一个常见的观察者模式程序。我看到它在通知观察者时执行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();
发布于 2019-04-26 09:56:49
在最简单的形式中,观察者只不过是一个被主体调用的函数。更“复杂”的观察者将是具有“通知”或类似函数的对象、错误处理程序以及“已完成”通知(取决于主题)。
这里有一个非常基本的例子来演示这一点:
var Subject = function() {
let observers = [];
return {
subscribe: function(observer) {
observers.push(observer);
},
unsubscribe: function(observer) {
var index = observers.indexOf(observer);
if(index > -1) {
observers.splice(index, 1);
}
},
nextValue: function(value) {
// call every registered observer
for(var i = 0; i < observers.length; i++){
observers[i](value);
}
}
};
};
// now simply pass an observer function to the subject
const subject = new Subject();
subject.subscribe(value => {
// do whatever you want with the value, call functions etc.
console.log(value);
});
subject.nextValue('hello world!');发布于 2019-04-26 05:22:25
只需使用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>
发布于 2019-04-26 07:19:58
下面的代码是一个常见的观察者模式程序。我看到它在通知观察者时执行console.log (“console.log(”console.log“+ number +”是被通知的!))。这是我可以返回其他东西的地方吗:值、函数调用等等?
是的,当主题调用通知时,它可以传递数据而不是索引,或者将自己传递给观察者。这样,观察者就可以观察主体的状态,并用它做一些事情。方法notifyObserver变成:
notifyObserver: function(observer) {
var index = observers.indexOf(observer);
if(index > -1) {
observers[index].notify(this);
}
},观察者是这样的:
var Observer = function(number) {
return {
notify: function(subject) {
// do something with subject
...
}
}
}https://stackoverflow.com/questions/55861027
复制相似问题