JS模式之簡(jiǎn)單的訂閱者和發(fā)布者模式完整實(shí)例
本文實(shí)例講述了JS模式之簡(jiǎn)單的訂閱者和發(fā)布者模式。分享給大家供大家參考。具體如下:
<!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>
希望本文所述對(duì)大家的javascript程序設(shè)計(jì)有所幫助。
- JavaScript設(shè)計(jì)模式之觀察者模式(發(fā)布者-訂閱者模式)
- JavaScript中發(fā)布/訂閱模式的簡(jiǎn)單實(shí)例
- JavaScript事件發(fā)布/訂閱模式原理與用法分析
- JavaScript實(shí)現(xiàn)與使用發(fā)布/訂閱模式詳解
- js 發(fā)布訂閱模式的實(shí)例講解
- js實(shí)現(xiàn)的訂閱發(fā)布者模式簡(jiǎn)單示例
- JavaScript設(shè)計(jì)模式之觀察者模式(發(fā)布訂閱模式)原理與實(shí)現(xiàn)方法示例
- [js高手之路]設(shè)計(jì)模式系列課程-發(fā)布者,訂閱者重構(gòu)購(gòu)物車的實(shí)例
- js設(shè)計(jì)模式之代理模式及訂閱發(fā)布模式實(shí)例詳解
- js簡(jiǎn)單粗暴的發(fā)布訂閱示例代碼
相關(guān)文章
canvas基礎(chǔ)繪制-絢麗倒計(jì)時(shí)的實(shí)例
下面小編就為大家?guī)?lái)一篇canvas基礎(chǔ)繪制-絢麗倒計(jì)時(shí)的實(shí)例。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-09-09
淺談JavaScript 數(shù)據(jù)屬性和訪問(wèn)器屬性
下面小編就為大家?guī)?lái)一篇淺談JavaScript 數(shù)據(jù)屬性和訪問(wèn)器屬性。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-09-09
利用weixin-java-miniapp生成小程序碼并直接返回圖片文件流的方法
這篇文章主要介紹了利用weixin-java-miniapp生成小程序碼并直接返回圖片文件流的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-03-03
javascript動(dòng)畫(huà)之模擬拖拽效果篇
其實(shí)javascript本身是具有原生拖放功能的,但是由于兼容性問(wèn)題,以及功能實(shí)現(xiàn)的方式,用的不是很廣泛。javascript動(dòng)畫(huà)廣泛使用的還是模擬拖拽。本文將詳細(xì)介紹javascript的模擬拖拽,有需要的可以參考借鑒。2016-09-09
JavaScript函數(shù)定義方法實(shí)例詳解
這篇文章主要介紹了JavaScript函數(shù)定義方法,結(jié)合實(shí)例形式較為詳細(xì)的分析了javascript函數(shù)的聲明、定義、調(diào)用等原理與常見(jiàn)操作技巧,需要的朋友可以參考下2019-03-03
JavaScript禁用右鍵單擊優(yōu)缺點(diǎn)分析
在本篇文章里小編給大家分享了關(guān)于JavaScript禁用右鍵單擊優(yōu)缺點(diǎn)分析,有需要的朋友們學(xué)習(xí)下。2019-01-01
基于Web Audio API實(shí)現(xiàn)音頻可視化效果
這篇文章主要介紹了基于Web Audio API實(shí)現(xiàn)音頻可視化效果,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-06-06
JS首屏加載時(shí)間優(yōu)化的解決方法總結(jié)
首屏加載時(shí)間是一個(gè)衡量網(wǎng)頁(yè)性能和用戶體驗(yàn)的關(guān)鍵指標(biāo),這個(gè)問(wèn)題無(wú)論是在面試中還是在項(xiàng)目開(kāi)發(fā)中都占有極其高的權(quán)重,本文為大家整理了幾種JS中優(yōu)化首屏加載時(shí)間的方法,希望對(duì)大家有所幫助2024-02-02

