JavaScript设计模式-观察者模式 - Go语言中文社区

JavaScript设计模式-观察者模式


    观察者模式也可以称为订阅模式,是一种从发布,到订阅,再到通知的过程。

    首先说什么是观察者模式:观察者模式就是定义了一个对象一对多的关系,让多个观察者同时监听一个大对象,当一个大对象发生变化时,所有的依赖它的对象都会得到通知。

    比如说:淘宝上某店铺的某品牌的鞋子,有两个买家小张和小王,让他们去买鞋的时候,发现鞋子断码了,他们都问店主,这个鞋的码什么时候有货,店主回复他们说,点一下到货通知,货到了会通知你们。等到货了,通知他们,这个过程就是观察者模式的过程。

        观察者模式(订阅模式)

        以下说订阅模式(字少好打字)
        订阅模式有五个重要的模块,分别是:发布者、发布列表、增加订阅者、发布消息、订阅者收到订阅消息。
        发布者
        很容易想到发布者肯定是一个一个对象
var obj = {}//发布者
        发布列表
        发布列表是发布者的一个方法(功能),用来存储订阅者的信息。
obj.list = []//发布列表
        增加订阅者
obj.listen = function(key,fn){
	if(!this.list[key]){
		this.list[key] = [];
	}
	this.list[key].push(fn);

}
            fn为回调函数,作为传入订阅者的信息。key值作为,每个订阅者订阅的不同商品,相同的放在一起。
        发布消息
obj.message = function(){
	var key = Array.prototype.shift.call(arguments); 		//取出消息类型名称,这里是红色
	var fns = this.list[key];		//取出消息对应回调函数集合
	if(!fns || fns.length == 0){		//如果没有订阅这个消息,直接返回
		console.log(key + "还没有上货,请静心等待...");
		return ;
	}
	for(var i = 0,fn; fn = fns[i++] ; ){
		fn.apply(this,arguments);
	}
}
        订阅者接受消息
obj.listen("红色",function(size){	//订阅者
	console.log("尺寸 :" + size);
})
obj.message("黑色",40);obj.message("红色",40);
        这就是观察者模式。

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/c__dreamer/article/details/80464007
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-03-01 22:50:46
  • 阅读 ( 1440 )
  • 分类:设计模式

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢