观察者模式
观察者模式也叫发布订阅者模式。
以投送报纸为例,发布者具有投送信息的方法,订阅者具有订阅和取消订阅的方法。
// 发布者
function Publisher() {
// 记录订阅者
this.subscribors = [];
}
// 投送
Publisher.prototype.deliver = function (data) {
this.subscribors.forEach(fn=>{
fn(data);
});
}
// 订阅者
function Subscriber() {
}
// 订阅
Subscriber.prototype.subscribe = function (publisher){
let result = publisher.subscribors.filter((ele)=>{
return ele === this;
});
if(result.length === 0){
publisher.subscribors.push(this);
}
}
// 取消订阅
Subscriber.prototype.unsubscribe = function (publisher) {
let result = publisher.subscribors.filter((ele)=>{
return ele !== this;
});
publisher.subscribors = result;
}
谁订阅执行谁,谁被观察谁就被执行。
观察者适用的场合
把人的行为和应用程序的行为分开
优缺点
优点
观察者模式是开发基于行为的大型应用程序的有力手段。
缺点
增加创建可观察对象所带来的时间开销。