最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JavaScript設(shè)計(jì)模式之觀察者模式(發(fā)布訂閱模式)原理與實(shí)現(xiàn)方法示例

 更新時(shí)間:2018年07月27日 08:49:50   作者:筱葭  
這篇文章主要介紹了JavaScript設(shè)計(jì)模式之觀察者模式(發(fā)布訂閱模式)原理與實(shí)現(xiàn)方法,結(jié)合實(shí)例形式分析了JavaScript觀察者模式概念、原理、使用方法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下

本文實(shí)例講述了JavaScript設(shè)計(jì)模式之觀察者模式(發(fā)布訂閱模式)原理與實(shí)現(xiàn)方法。分享給大家供大家參考,具體如下:

觀察者模式,又稱為發(fā)布訂閱模式,它定義了一種一對(duì)多的關(guān)系,讓多個(gè)觀察者對(duì)象同時(shí)監(jiān)聽(tīng)某一個(gè)主題對(duì)象,這個(gè)主題對(duì)象的狀態(tài)發(fā)生變化時(shí)就會(huì)通知所有的觀察者對(duì)象,使得它們能夠自動(dòng)更新自己的狀態(tài)。

在觀察者模式中,并不是一個(gè)對(duì)象調(diào)用另一個(gè)對(duì)象的方法,而是一個(gè)對(duì)象訂閱另一個(gè)對(duì)象的特定活動(dòng)并在狀態(tài)改變后獲得通知。訂閱者也稱為觀察者,而被觀察的對(duì)象稱為發(fā)布者或主題。當(dāng)發(fā)生了一個(gè)重要的事件時(shí),發(fā)布者將會(huì)通知(調(diào)用)所有訂閱者并且可能經(jīng)常以事件對(duì)象的形式傳遞消息。

思路:

① 發(fā)布者需要一個(gè)數(shù)組類型的屬性subscribers,以存儲(chǔ)所有的訂閱者;

② 訂閱subscribe():將新的訂閱者加入到這個(gè)數(shù)組中去;

③ 退訂unsubscribe():從訂閱者數(shù)組中刪除某個(gè)訂閱者;

④ 發(fā)布publish():循環(huán)遍歷subscribers數(shù)組中的每一個(gè)元素,并通知他們,即發(fā)送消息,意味著調(diào)用訂閱者的某個(gè)方法。因此,當(dāng)用戶訂閱信息時(shí),該訂閱者需要向subscribe()提供它的其中一個(gè)方法。

subscribe()unsubscribe()、publish()三種方法都需要一個(gè)type參數(shù),因?yàn)榘l(fā)布者可能觸發(fā)多個(gè)事件,而用戶可能僅選擇訂閱其中一種,而不是另外一種。

使用觀察者模式的好處:

① 支持簡(jiǎn)單的廣播通信,自動(dòng)通知所有已經(jīng)訂閱過(guò)的對(duì)象。

② 頁(yè)面載入后目標(biāo)對(duì)象很容易與觀察者存在一種動(dòng)態(tài)關(guān)聯(lián),增加了靈活性。

③ 目標(biāo)對(duì)象與觀察者之間的抽象耦合關(guān)系能夠單獨(dú)擴(kuò)展以及重用。

在JavaScript中,一般使用事件模型來(lái)替代傳統(tǒng)的觀察者模式。 DOM事件,也是JavaScript和DOM之間實(shí)現(xiàn)的一種觀察者模式。

Eg1:

監(jiān)聽(tīng)用戶單擊按鈕的動(dòng)作,但沒(méi)有辦法預(yù)知用戶將在什么時(shí)候點(diǎn)擊。因此,訂閱按鈕上的click事件,當(dāng)按鈕被點(diǎn)擊時(shí),便向訂閱者發(fā)布此消息。

btn.addEventListener("click", function() {
    console.log("First click");
}, false);
// 可以有多個(gè)訂閱者
btn.addEventListener("click", function() {
    console.log("Second click");
}, false);
btn.click();

Eg2:

非觀察者模式:

$.ajax({
  url: './login',
  type: 'post',
  contentType: 'application/json',
  dataType:'json',
  success: function(data) {
    if(data.status === "success") { // 登錄成功,渲染header、footer
      header.setInfo(data.headerInfo);
      footer.setInfo(data.footerInfo);
    }
  }
});

觀察者模式:

$.ajax({
  ...,
  success: function(data) {
    if(data.status === "success") {
      // 登錄成功,發(fā)布登陸成功消息
      login.trigger("loginsuccess", data);
    }
  }
});
var header = (function() { // 監(jiān)聽(tīng)消息
  login.listen("loginsuccess", function(data){
    header.setInfo(data.headerInfo);
  });
  return {
    setInfo: function(data) {
      console.log("渲染header");
    }
  };
})();
var footer = (function() {
  login.listen("loginsuccess", function(data){
    footer.setInfo(data.navInfo);
  });
  return {
    setInfo: function(data) {
      console.log("渲染nav");
    }
  };
})();

更多關(guān)于JavaScript相關(guān)內(nèi)容可查看本站專題:《javascript面向?qū)ο笕腴T教程》、《JavaScript切換特效與技巧總結(jié)》、《JavaScript查找算法技巧總結(jié)》、《JavaScript錯(cuò)誤與調(diào)試技巧總結(jié)》、《JavaScript數(shù)據(jù)結(jié)構(gòu)與算法技巧總結(jié)》、《JavaScript遍歷算法與技巧總結(jié)》及《JavaScript數(shù)學(xué)運(yùn)算用法總結(jié)

希望本文所述對(duì)大家JavaScript程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • javascript中Object使用詳解

    javascript中Object使用詳解

    這篇文章主要介紹了javascript中Object使用詳解,非常全面詳盡,有需要的小伙伴參考下
    2015-01-01
  • javascript定義函數(shù)的方法

    javascript定義函數(shù)的方法

    javscript中定義和聲明函數(shù)有三種方式:正常方法 構(gòu)造函數(shù) 函數(shù)直接量。
    2010-12-12
  • Typescript3.9 常用新特性一覽(推薦)

    Typescript3.9 常用新特性一覽(推薦)

    這篇文章主要介紹了Typescript3.9 常用新特性一覽,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05
  • 微信小程序?qū)崿F(xiàn)經(jīng)典window掃雷游戲

    微信小程序?qū)崿F(xiàn)經(jīng)典window掃雷游戲

    這篇文章主要為大家詳細(xì)介紹了微信小程序?qū)崿F(xiàn)經(jīng)典window掃雷游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-09-09
  • javascript設(shè)計(jì)模式 – 備忘錄模式原理與用法實(shí)例分析

    javascript設(shè)計(jì)模式 – 備忘錄模式原理與用法實(shí)例分析

    這篇文章主要介紹了javascript設(shè)計(jì)模式 – 備忘錄模式,結(jié)合實(shí)例形式分析了javascript備忘錄模式相關(guān)概念、原理、用法及操作注意事項(xiàng),需要的朋友可以參考下
    2020-04-04
  • js中函數(shù)聲明與函數(shù)表達(dá)式

    js中函數(shù)聲明與函數(shù)表達(dá)式

    js的解析器對(duì)函數(shù)聲明與函數(shù)表達(dá)式并不是一視同仁地對(duì)待的。對(duì)于函數(shù)聲明,js解析器會(huì)優(yōu)先讀取,確保在所有代碼執(zhí)行之前聲明已經(jīng)被解析,而函數(shù)表達(dá)式,如同定義其它基本類型的變量一樣,只在執(zhí)行到某一句時(shí)也會(huì)對(duì)其進(jìn)行解析,
    2015-06-06
  • JS實(shí)現(xiàn)進(jìn)入頁(yè)面時(shí)漸變背景色的方法

    JS實(shí)現(xiàn)進(jìn)入頁(yè)面時(shí)漸變背景色的方法

    這篇文章主要介紹了JS實(shí)現(xiàn)進(jìn)入頁(yè)面時(shí)漸變背景色的方法,涉及javascript操作css控制背景色漸變的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-02-02
  • 整理關(guān)于Bootstrap表單的慕課筆記

    整理關(guān)于Bootstrap表單的慕課筆記

    這篇文章主要為大家整理了關(guān)于Bootstrap表單的慕課筆記,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-03-03
  • ?typeScript入門基礎(chǔ)介紹

    ?typeScript入門基礎(chǔ)介紹

    這篇文章主要介紹了?typeScript入門基礎(chǔ),TypeScript?是由微軟開(kāi)發(fā)的開(kāi)源、跨平臺(tái)的編程語(yǔ)言,是?javaScript?的超集,最終被編譯為?javaScript代碼。常常被簡(jiǎn)稱為TS支持JS、ES語(yǔ)法,下文將繼續(xù)其他基礎(chǔ)介紹,需要的朋友可以參考一下
    2022-02-02
  • javascript定時(shí)保存表單數(shù)據(jù)的代碼

    javascript定時(shí)保存表單數(shù)據(jù)的代碼

    我相信有不少TX用過(guò)QQ或163的郵箱吧?他們中有一個(gè)比較有用且有趣的功能,如果您在編寫郵件,那在固定一個(gè)時(shí)間頻率內(nèi),它會(huì)自動(dòng)將您的郵件內(nèi)容保存起來(lái),以免丟失。
    2011-03-03

最新評(píng)論

鄢陵县| 正宁县| 科尔| 松江区| 张掖市| 三明市| 广宗县| 泰和县| 南通市| 旬邑县| 山阳县| 景东| 类乌齐县| 台江县| 关岭| 盐津县| 清新县| 叙永县| 佛冈县| 海林市| 普洱| 钦州市| 惠东县| 平顺县| 大厂| 子洲县| 花垣县| 曲靖市| 山阳县| 尼勒克县| 岳阳县| 越西县| 子长县| 隆尧县| 青州市| 栾城县| 北辰区| 阳新县| 大悟县| 湘阴县| 庄浪县|