发布订阅者模式、观察者模式总结

/**
* 观察者模式定义:Subject维持一系列它的对象Observer,当有关状态发生变更时Subject对象则会通知一系列Observer对象进行更新。
* 在Subject对象添加了一系列Observer对象之后,Subject维持一系列Observer对象,当有关状态发生变更时Subject对象则会通知这
* 一系列Observer对象进行更新
* splice讲解(当前的索引,截取的个数,增加的数字)
* @param 1个参数
* @patam 2个参数
* @param 3个参数
*/
function Subject() {
this. observers = [];
}
Subject. prototype = {
add : function ( observer) {
this. observers. push( observer);
},
remove : function ( observer) {
var observers = this. prototype;
for ( var i = 0; i < observers. length; i++) {
if ( observers[ i] === observer) {
this. observers. splice( i, 1)
}
}
},
notify : function () {
var observers = this. observers;
for ( var i = 0; i < observers. length; i++) {
observers[ i]. notify();
}
}
}

var sub = new Subject();
var obs1 = new Observer( 't1');
var obs2 = new Observer( 't2');
Observer. prototype = {
update : function () {
console. log( 'my name is' + this. name);
}
}
sub. add( obs1);
sub. add( obs2);
sub. notify();
/**
* 发布订阅模式指的是希望接收通知的对象(Subscriber)基于一个主题通过自定义事件订阅主题,被激活事件的对象(Publisher)通过发布主题事件的方式通知各个订阅该主题的 Subscriber 对象。
*
*/
let pubSub = {
list: {},
// 订阅
subscribe : function ( key, fn) {
if (! this. list[ key]) {
this. list[ key] = [];
};
this. list[ key]. push( fn);
},
// 发布
publish : function () {
let arg = arguments;
let key = []. shift. call( arg);
let fns = this. list( key);
if (! fns || fns. length <= 0) return;
for ( var i = 0; i < fns. length; i++) {
fns[ i]. apply( this, arg);
}
},
// 取消订阅
unSubscribe : function ( key) {
delete this. list[ key];
}
}
pubSub. subscribe( 'name', ( name) => {
console. log( 'your name is' + name);
})

猜你喜欢

转载自www.cnblogs.com/yayaxuping/p/9911024.html