<h1>js发布——订阅模式</h1>
<p>发布—订阅模式幼教观察者模式,他定义对象间的一种一对多的依赖关系,当一个对象的状态发生变化时,所依赖于他的对象都将得到通知。
在javascript开发中,我们一般用事件模型来代替传统的发布-订阅模式。</p>
<p>发布-订阅示例:</p>
<script>
var salesOffices = { //定义售楼处
clientList: [], //缓存列表,存放订阅者的回调函数
listen: function(fn){ //增加订阅者
this.clientList.push( fn ); //订阅的消息添加进缓存列表
},
trigger: function(){ //发布消息
for( var i = 0, fn; fn = this.clientList[ i++ ]; ){
fn.apply( this, arguments );
}
}
};
salesOffices.listen( function( price, squareMeter ){
console.log( "价格=" + price );
console.log( "squareMeter = " + squareMeter );
} );
salesOffices.listen( function( price, squareMeter ){
console.log( "价格=" + price );
console.log( "squareMeter = " + squareMeter );
} );
salesOffices.trigger( 200000, 88 );
</script>
<p>至此,我们已经实现了一个最简单的发布——订阅模式,但这里还存在一些问题,那就是订阅者接受到了发布者发布的每个消息,所以,我们
有必要加上一个标示key,让订阅者只阅读自己感兴趣的消息。改写代码如下:</p>
<script>
var salesOffice = {
clientList: {},
listen: function( key, fn ){
if( !this.clientList[ key ] ){
this.clientList[ key ] = [];
};
this.clientList[ key ].push( fn );
},
trigger: function(){
var key = Array.prototype.shift.call( arguments );
fns = this.clientList[ key ];
if( !fns || fns.length ===0 ){
return false;
};
for( var i = 0, fn; fn = fns[ i++ ]; ){
fn.apply( this, arguments );
}
}
};
salesOffice.listen( "squareMeter88", function( price ){
console.log( "价格 = " + price );
} );
salesOffice.listen( "squareMeter100", function( price ){
console.log( "价格 = " + price );
} );
salesOffice.trigger( "squareMeter88", 200000 );
salesOffice.trigger( "squareMeter100", 2000000 );
</script>
js发布——订阅模式
最新推荐文章于 2024-08-15 22:33:35 发布