A5下载 - 努力做内容最丰富最安全的下载站!

A5站长下载站

当前位置:A5下载 > 源码技巧 > 父类数据 > JS模式之简单的订阅者和发布者模式完整实例

JS模式之简单的订阅者和发布者模式完整实例

时间:2015-07-01 10:19作者:zhao人气:49

本文实例讲述了JS模式之简单的订阅者和发布者模式。分享给大家供大家参考。具体如下:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"

"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

<title>parten</title>

</head>

<body>

<script>

var singletonTest = SingletonTest.getInstance({

pointX : 5

});

console.log(singletonTest.pointX);

//easy_Observer_model;

function ObserverList(){

this.observerList = [];

};

ObserverList.prototype.Add = function(obj){

return this.observerList.push(obj);

};

ObserverList.prototype.Empty = function(){

this.observerList = [];

};

ObserverList.prototype.Count = function(){

return this.observerList.length;

};

ObserverList.prototype.Get = function(index){

if(index>-1 && index<this.observerList.length)

return this.observerList[index];

};

ObserverList.prototype.Insert = function(obj,index){

var pointer = -1;

if(index == 0){

this.observerList.unshift(obj);

pointer = index;

}else if(index == this.observerList.length){

this.observerList.push(obj);

pointer = index;

};

return pointer;

};

ObserverList.prototype.IndexOf = function(obj,startIndex){

var i = startIndex, pointer = -1;

while(i < this.observerList.length){

if(this.observerList[i] === obj){

pointer = i;

};

i++

};

return pointer;

};

ObserverList.prototype.RemoveIndexAt = function(index){

if(index === 0){

this.observerList.shift();

}else if(index === this.observerList.length-1){

this.observerList.pop();

};

return index;

};

function extend(obj,extension){

for(var key in obj){

extension[key] = obj[key];

}

};

//

function Subject(){

this.observers = new ObserverList();

};

Subject.prototype.AddObserver = function(obj){

this.observers.add(obj)

};

Subject.prototype.RemoveObserver = function(observer){

this.observers.removeIndexAt( this.observers.IndexOf(observer,0) );

};

Subject.prototype.Notify = function(context){

var observerCount = this.observers.count();

for(var i=0; i<observerCount; i++){

this.observers.Get(i).update(context);

};

}

//Pubsub//subscribe

var Pubsub = {};

(function(q){

var topics = [],

subUid = -1;

q.publish = function(topic,args){

if(!topics[topic]){

return false;

};

var subscribers = topics[topic],

len = subscribers ? subscribers.length : 0;

while(len--){

subscribers[len].func(topic,args);

}

return this;

};

q.subscribe = function(topic,func){

if(!topics[topic]){

topics[topic] = [];

};

var token = (++subUid).toString();

topics[topic].push({

token : token,

func : func

});

return token;

};

q.unsubscribe = function(token){

for(var m in topics){

if(topics[m]){

for(var i=0; i<topics[m].length; i++){

if(topics[m][i].token === token){

topics[m].splice(i,1);

return token;

}

}

};

};

return this;

}

})(pubsub);

</script>

</body>

</html>

希望本文所述对大家的javascript程序设计有所帮助。

标签模式,简单,订阅,发布者,完整,实例,本文,实例,讲述了,模

相关下载

查看所有评论+

网友评论

网友
您的评论需要经过审核才能显示

公众号