亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

JavaScript設計模式之觀察者模式(發布者-訂閱者模式)

2019-11-20 14:06:46
字體:
來源:轉載
供稿:網友

觀察者模式( 又叫發布者-訂閱者模式 )應該是最常用的模式之一. 在很多語言里都得到大量應用. 包括我們平時接觸的dom事件. 也是js和dom之間實現的一種觀察者模式.

復制代碼 代碼如下:

div.onclick  =  function click (){
alert ( ”click' )
}

只要訂閱了div的click事件. 當點擊div的時候, function click就會被觸發。

那么到底什么是觀察者模式呢. 先看看生活中的觀察者模式。

好萊塢有句名言. “不要給我打電話, 我會給你打電話”. 這句話就解釋了一個觀察者模式的來龍去脈。 其中“我”是發布者, “你”是訂閱者。

再舉個例子,我來公司面試的時候,完事之后每個面試官都會對我說:“請留下你的聯系方式, 有消息我們會通知你”。 在這里“我”是訂閱者, 面試官是發布者。所以我不用每天或者每小時都去詢問面試結果, 通訊的主動權掌握在了面試官手上。而我只需要提供一個聯系方式。

觀察者模式可以很好的實現2個模塊之間的解耦。 假如我正在一個團隊里開發一個html5游戲. 當游戲開始的時候,需要加載一些圖片素材。加載好這些圖片之后開始才執行游戲邏輯. 假設這是一個需要多人合作的項目. 我完成了Gamer和Map模塊, 而我的同事A寫了一個圖片加載器loadImage。

loadImage的代碼如下:

復制代碼 代碼如下:

loadImage(  imgAry,  function(){
Map.init();
Gamer.init();
} )

當圖片加載好之后, 再渲染地圖, 執行游戲邏輯. 嗯, 這個程序運行良好. 突然有一天, 我想起應該給游戲加上聲音功能. 我應該讓圖片加載器添上一行代碼.
復制代碼 代碼如下:

loadImage(  imgAry,  function(){
Map.init();
Gamer.init();
Sount.init();
} )

可是寫這個模塊的同事A去了外地旅游. 于是我打電話給他, 喂. 你的loadImage函數在哪, 我能不能改一下, 改了之后有沒有副作用. 如你所想, 各種不淡定的事發生了. 如果當初我們能這樣寫呢:
復制代碼 代碼如下:

loadImage.listen( ”ready', function(){
Map.init();
})
loadImage.listen( ”ready', function(){
Gamer.init();
})
loadImage.listen( ”ready', function(){
Sount.init();
})

loadImage完成之后, 它根本不關心將來會發生什么, 因為它的工作已經完成了. 接下來它只要發布一個信號.

復制代碼 代碼如下:

loadImage.trigger( ”ready' );

那么監聽了loadImage的'ready'事件的對象都會收到通知. 就像上個面試的例子. 面試官根本不關心面試者們收到面試結果后會去哪吃飯. 他只負責把面試者的簡歷搜集到一起. 當面試結果出來時照著簡歷上的電話挨個通知.

說了這么多概念, 來一個具體的實現. 實現過程其實很簡單. 面試者把簡歷扔到一個盒子里, 然后面試官在合適的時機拿著盒子里的簡歷挨個打電話通知結果.

復制代碼 代碼如下:

Events = function() {
var listen, log, obj, one, remove, trigger, __this;
obj = {};
__this = this;
listen = function( key, eventfn ) {  //把簡歷扔盒子, key就是聯系方式.
var stack, _ref;  //stack是盒子
stack = ( _ref = obj[key] ) != null ? _ref : obj[ key ] = [];
return stack.push( eventfn );
};
one = function( key, eventfn ) {
remove( key );
return listen( key, eventfn );
};
remove = function( key ) {
var _ref;
return ( _ref = obj[key] ) != null ? _ref.length = 0 : void 0;
};
trigger = function() {  //面試官打電話通知面試者
var fn, stack, _i, _len, _ref, key;
key = Array.prototype.shift.call( arguments );
stack = ( _ref = obj[ key ] ) != null ? _ref : obj[ key ] = [];
for ( _i = 0, _len = stack.length; _i < _len; _i++ ) {
fn = stack[ _i ];
if ( fn.apply( __this,  arguments ) === false) {
return false;
}
}
return {
listen: listen,
one: one,
remove: remove,
trigger: trigger
}
}

最后用觀察者模式來做一個成人電視臺的小應用.

復制代碼 代碼如下:

//訂閱者
var adultTv = Event();
adultTv .listen(  ”play',  function( data ){
alert ( “今天是誰的電影” + data.name );
});
//發布者
adultTv .trigger(  ”play',  { ‘name': ‘麻生希' }  )

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久久精品国产一区二区| 亚洲精品国产综合久久| 美女性感视频久久久| 91深夜福利视频| 亚洲国产精品电影在线观看| 国产精品户外野外| 91精品在线影院| 欧美日韩不卡合集视频| xxav国产精品美女主播| 成人网在线免费观看| 亚洲欧美日韩精品久久亚洲区| 久久天堂电影网| 一区二区三区视频免费在线观看| 欧美激情一级精品国产| 国产精品丝袜白浆摸在线| 国产主播喷水一区二区| 亚洲伦理中文字幕| 欧美日韩美女视频| 国产一区二区三区久久精品| 亚洲一区二区中文字幕| 97色在线观看免费视频| 亚洲精品一区中文| 欧美日韩在线免费观看| 亚洲国产99精品国自产| 欧美大秀在线观看| 成人福利网站在线观看| 亚洲人成77777在线观看网| 亚洲最新在线视频| 国产精品青草久久久久福利99| 亚洲国产一区二区三区四区| 精品成人国产在线观看男人呻吟| 欧美精品在线观看| 国产v综合v亚洲欧美久久| 欧美多人爱爱视频网站| 欧美美最猛性xxxxxx| 久久97久久97精品免视看| 国产精品十八以下禁看| 国产啪精品视频| 色婷婷av一区二区三区在线观看| 91免费综合在线| 91天堂在线视频| 欧美日韩国产激情| 欧美激情图片区| 日韩中文在线中文网在线观看| 欧美午夜美女看片| 欧美最猛性xxxxx(亚洲精品)| 日韩精品中文在线观看| 国产一区二区三区在线看| 96精品久久久久中文字幕| 欧美在线www| 欧美成aaa人片在线观看蜜臀| 欧洲s码亚洲m码精品一区| 国产精品精品久久久久久| 91社影院在线观看| 国产精品v片在线观看不卡| 久久av红桃一区二区小说| 欧美电影免费观看网站| 国产精品入口夜色视频大尺度| 成人免费直播live| 日韩欧美在线观看| 欧美日韩免费网站| 色婷婷av一区二区三区在线观看| 欧美日韩在线视频观看| 日韩激情视频在线| 日本高清不卡在线| 中文字幕日韩免费视频| 成人h视频在线| 国产成人精品一区二区三区| 欧美中在线观看| 奇门遁甲1982国语版免费观看高清| 97久久精品国产| 亚洲国产欧美日韩精品| 成人写真福利网| 久久精品国产综合| 色婷婷成人综合| 亚洲欧美日韩国产中文| 欧美精品在线网站| 一个人看的www欧美| 国产精品女主播| 欧美激情按摩在线| 国产精品激情av在线播放| 精品二区三区线观看| 亚洲欧洲激情在线| 亚洲欧美日韩视频一区| 欧美激情久久久| 欧美另类在线播放| 日韩成人在线播放| 欧美电影免费观看电视剧大全| 欧美三级免费观看| 国产91精品黑色丝袜高跟鞋| 精品亚洲夜色av98在线观看| 久久久999精品免费| 中文字幕亚洲第一| 亚洲国产天堂网精品网站| 国内精品小视频| 国模精品视频一区二区三区| 亚洲字幕一区二区| 欧美一区二区.| 国产成人综合一区二区三区| 精品久久久在线观看| 亚洲第一精品福利| 日韩av第一页| 欧美色图在线视频| 成人国产精品av| 日韩中文字幕国产| 日韩中文字幕网| www.亚洲天堂| 欧美影院成年免费版| 国产精品国产福利国产秒拍| 国产一区二区三区日韩欧美| 国产一区av在线| 日韩一区二区精品视频| 欧美视频中文在线看| 亚洲日本中文字幕免费在线不卡| 色偷偷综合社区| 亚洲第一福利在线观看| 国产精品爽爽爽| 国产视频久久久久| 亚洲精品不卡在线| 91精品国产综合久久久久久久久| 国产精品视频不卡| 欧美日韩中文在线观看| 91理论片午午论夜理片久久| 欧美激情免费看| 91爱爱小视频k| 98精品国产自产在线观看| 欧美亚洲激情视频| 欧美高跟鞋交xxxxhd| 国产亚洲成av人片在线观看桃| 久久久久久综合网天天| 欧美孕妇与黑人孕交| 久久久99久久精品女同性| 日韩av在线免费观看一区| 久久精品99久久香蕉国产色戒| 欧美成人自拍视频| 亚洲一区二区免费| 成人福利在线观看| 国产精品女主播| 国产午夜精品美女视频明星a级| 成人免费激情视频| 欧美贵妇videos办公室| 欧美黄色三级网站| 精品视频在线播放免| 国产一区二区精品丝袜| 98精品在线视频| 亚洲天堂成人在线视频| 欧美国产精品va在线观看| 91精品国产高清久久久久久91| 91久久久久久久| 亚洲第一区中文99精品| 欧美电影免费观看电视剧大全| 92福利视频午夜1000合集在线观看| 国产精品第一第二| 色偷偷888欧美精品久久久| 亚洲精品99久久久久中文字幕| 日韩av在线影院| 欧美日韩视频免费播放| 狠狠躁天天躁日日躁欧美| 国产69精品久久久久99| 亚洲天堂免费视频| 欧美电影在线观看完整版| 久久久久久免费精品| 久久综合九色九九| 中文字幕自拍vr一区二区三区|