您的位置:首页 > 其它

设计模式之发布/订阅模式

2016-08-11 16:43 197 查看
<pre name="code" class="html"><html>
<head>
<title>Observer</title>
<script type="text/javascript" src="js/jquery-1.12.4.min.js"></script>
</head>
<body>

<script type="text/javascript">
var pubsub = (function() {
//订阅者列表
var events = {};
var subUid = 0;
//发布
function publish(eventName, args) {
if (!events[eventName]) {
return false;
}
var subscribers = events[eventName];
var len = subscribers.length;
while (len--) {
subscribers[len].callback(eventName, args);
}
}
//订阅
function subscribe(eventName, callback) {
events[eventName] = events[eventName] || [];
var id = subUid++;
events[eventName].push({
callback: callback,
id: id
});
return id;
}
//取消订阅
function unsubscribe(id) {
var eventName;
var i;
var len;
var subscribers;
for (eventName in events) {
subscribers = events[eventName];
if (subscribers) {
for (i = 0, len = subscribers.length; i < len; i++) {
if (subscribers[i].id === id) {
subscribers.splice(i, 1);
return id;
}
}
}
}
return this;
}
//利用Revealing Module模式隐藏内部实现,提供接口
return {
publish: publish,
subscribe: subscribe,
unsubscribe: unsubscribe
};
}());
//在hello事件生增加一个订阅
var subscription = pubsub.subscribe("hello", function(eventName, data) {
console.log("Event:" + eventName + "/data:" + data);
});
//向订阅者发送消息
pubsub.publish("hello", ["天镶"]);
//向订阅者发送消息
pubsub.publish("hello", ["天镶", "求", "offer"]);
//取消订阅
pubsub.unsubscribe(subscription);
//向订阅者发送消息
pubsub.publish("hello", ["天镶", "再求", "offer"]);
</script>
</body>
</html>



                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: