实现观察者模式-observer
我们在日常开发使用经常遇到一些场景需要使用到观察者模式,比如登录成功需要改动同步页面多个模块的信息,这时最佳选择是使用observer 观察者模式。
class Apm {
constructor(){
//观察者模式
this.observer = {
//订阅
addSubscriber: function (callback, opt) {
this.subscribers[this.subscribers.length] = {
callback: callback,
opt: (opt !== 'undefined') ? opt : {}
};
},
//退订
removeSubscriber: function (callback) {
for (var i = 0; i < this.subscribers.length; i++) {
if (this.subscribers[i].callback === callback) {
delete (this.subscribers[i]);
}
}
},
//发布
publish: function (what, _observer) {
for (var i = 0; i < this.subscribers.length; i++) {
if (typeof this.subscribers[i].callback === 'function') {
let observer = (_observer !== 'undefined') ? _observer : {};
// 执行注册的各种回调
this.subscribers[i].callback({ret: what, opt: this.subscribers[i].opt, observer: observer});
}
}
},
// 将对象o具有观察者功能
make: function (o) {
for (var i in this) {
o[i] = this[i];
o.subscribers = [];
}
}
};
this.observerLogin = {
success: function (ret) {
this.publish(ret, {type: 'success'});
},
error: function(ret){
this.publish(ret, {type: 'error'});
}
};
this.observer.make(this.observerLogin);
}
}本文内容仅供个人学习/研究/参考使用,不构成任何决策建议或专业指导。分享/转载时请标明原文来源,同时请勿将内容用于商业售卖、虚假宣传等非学习用途哦~感谢您的理解与支持!