上一次我们研究观察者
模式时,许多文章说它也被称为订阅发布(发布/订阅模式),但是Javascript设计模型中这两个模型之间有一些差异:
1种观察模式要求希望接收主题通知的观察者必须订阅内容更改事件。
2。订阅/发布模式使用主题/事件通道,这是
用户和出版商之间。事件
系统允许代码定义
应用程序特定的事件,可以将自定义的
参数,和自定义参数包含用户需要的价值,目的是为了避免用户和出版商之间的相关性。
与观察者模型不同,它允许任何订阅者
执行适当的事件
处理程序来
注册和接收发布者发出的通知。
嗯,没有意识到,以下是我的理解:
在1。观察者模式,
目标对象负责
维护观察者。发布/订阅模式中的发布者不关心订阅
服务器,只负责丢失
消息。
2。在观察者模式,观察者应该提供一个接口,然后调用接口保持目标和目标状态一致,当目标对象的状态发生变化,所有的观察者都有一个统一的接口(例如,写在前面的文章中,更新的
方法和大家的方法称为本名)。在发布/订阅模式,用户事件的触发是不是基于这样的一个接口,但用户触发通过听特定的消息,它一般包含名称和用户要求的参数,它是可以理解的,用户听不发布,但消息池,只要作为信息库的相关信息,即触发E无论消息是谁,发布者和订阅者
都是解耦的。
下面是js中发布/订阅模式的实现,并
复制并
粘贴到
控制台中并进行测试。
复制代码代码如下所示:
Var PubSub =(
函数(){()
var
主题= },
subuid = - 1;
新闻发布
q.publish =
功能(话题,args){
如果(!主题{ } };返回;}
var主题= {主题},
subs.length len =;
而(镜头){
潜艇{ }函数len(话题,args);
}
返回此;
};
订阅/事件
q.subscribe =功能(主题、功能){
主题{主题}主题} {主题};
VaR令牌=(+ + subuid)ToString();
主题{
令牌,
功能:功能
});
返回令牌;
};
回问;
取消订阅将不写入,遍历主题,然后
保存以前的返回令牌,
删除指定的元素。
});
事件
VaR logMsg =功能(主题、数据){
console.log(记录:+主题+:+数据);
}
监听指定的消息 / / 'msgname
VaR子= pubsub.subscribe('msgname,logMsg);
msgname ' / /新闻发布
Pubsub.publish('msgname,你好世界);
没有人听to'msgname1'news /释放
Pubsub.publish ('anotherMsgName','me too!);