<!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>
转载于:https://www.cnblogs.com/diligenceday/p/3428586.html
相关资源:JS模式之简单的订阅者和发布者模式完整实例