在线不卡日本ⅴ一区v二区_精品一区二区中文字幕_天堂v在线视频_亚洲五月天婷婷中文网站

  • <menu id="lky3g"></menu>
  • <style id="lky3g"></style>
    <pre id="lky3g"><tt id="lky3g"></tt></pre>

    簡單學(xué)代碼設(shè)計模式-觀察者模式

    簡單學(xué)代碼設(shè)計模式-觀察者模式

    設(shè)計模式目前分為23種三大類,而觀察者模式作為開發(fā)設(shè)計中常用的代碼設(shè)計模式之一,屬于行為模式中的一種,也是我們眾多開發(fā)最容易掌握應(yīng)用的一種,今天我們來聊一聊觀察者模式。

    觀察者模式的定義

    觀察者模式(Observer Design Pattern):在對象之間定義一個一對多的依賴,當(dāng)一個對象狀態(tài)改變的時候,所有依賴的對象都會得到通知并自動更新。簡單點(diǎn)來說就是當(dāng)某個對象發(fā)生改變時,這個對象的所有觀察者都會做出相應(yīng)的改變。

    舉個例子,當(dāng)你干項目時,一旦你的進(jìn)度發(fā)生改變,盯著這項目的領(lǐng)導(dǎo)們,會根據(jù)項目的進(jìn)度做出不同的計劃策略。當(dāng)進(jìn)度慢時,產(chǎn)品催著你加班趕進(jìn)度,市場做好規(guī)劃預(yù)宣傳,人事繼續(xù)招人……

    Subject(被觀察者)

    定義被觀察者必須實(shí)現(xiàn)的職責(zé), 它可以動態(tài)地增加、 刪除觀察者。它的兩大主要作用是:管理觀察者并通知觀察者。

    Observer(觀察者)

    觀察者接收到變更消息后,就會進(jìn)行對應(yīng)的方法操作,對接收到的信息進(jìn)行處理。

    ConcreteSubject(被觀察者的實(shí)現(xiàn)類)

    定義被觀察者自己的業(yè)務(wù)邏輯, 同時定義對哪些事件進(jìn)行通知。

    ConcreteObserver(觀察者具體實(shí)現(xiàn))

    每個觀察者在接收到消息后的處理反應(yīng)是不同,各個觀察者有自己的處理邏輯。

    Code Time

    接下來我們用代碼簡單實(shí)現(xiàn)一下圖一的中觀察者模式,首先我們創(chuàng)建一個被觀察者父類Subject,里面包括觀察者的添加移除以及觸發(fā)變化事件;

    然后創(chuàng)建一個觀察者的的父類接口Observer,里面包含被觀察者發(fā)生變化時,觀察者需做出對應(yīng)變化的事件;

    接下來,定義一個Me繼承自Subject的被察者類,里面有做項目doProject和一個判斷方法,當(dāng)出現(xiàn)delay時,就通知項目的其他人項目延期了,要做出對應(yīng)的措施了;

    這里我就簡單舉例寫HRPMOM三個類型的觀察者了,如果需要其他觀察者類型,再實(shí)現(xiàn)Observer接口即可。

    最后,我們來測試一下代碼,先創(chuàng)建一個張三的被觀察者類,然后分別創(chuàng)建HR、PM、OM的觀察者,加入觀察張三的隊列,最后在被觀察者張三執(zhí)行邏輯時,觸發(fā)監(jiān)聽改變的事件,所有加入觀察張三的觀察者觸發(fā)自己相應(yīng)的邏輯。

    運(yùn)行上述代碼的結(jié)果是:

    干活的張三因為項目延期了,其他觀察張三的觀察者果然都做出了自己的處理,HR招人,PM催加班,市場重新規(guī)劃……

    觀察者模式的優(yōu)缺點(diǎn)

    優(yōu)點(diǎn)

  • 觀察者模式在被觀察者和觀察者之間建立一個抽象的耦合關(guān)系,被觀察者不需要知道自己被多少觀察者觀察,當(dāng)需要添加新的觀察者時,只需添加到觀察者的隊列中去即可,代碼可擴(kuò)展性較好
  • 觀察者模式支持廣播通訊,被觀察者會向所有的登記過的觀察者發(fā)出通知
  • 缺點(diǎn)

  • 如果一個被觀察者對象有較多的直接或間接的觀察者的話,通知花費(fèi)時間較長,性能下降
  • 如果在被觀察者之間有循環(huán)依賴的話,被觀察者會觸發(fā)它們之間進(jìn)行循環(huán)調(diào)用,可能會直接導(dǎo)致系統(tǒng)崩潰。
  • 在同步通知觀察者時,如果其中一個發(fā)生異常,可能導(dǎo)致后續(xù)通知處理失敗。
  • 如果對觀察者的通知是通過另外的線程進(jìn)行異步通知的話,系統(tǒng)必須保證通知的可靠性
  • 雖然觀察者模式可以隨時使觀察者知道所觀察的對象發(fā)生了變化,但是觀察者模式?jīng)]有相應(yīng)的機(jī)制使觀察者知道所觀察的對象是怎么發(fā)生變化的。
  • 應(yīng)用場景

  • 監(jiān)聽器的實(shí)現(xiàn)就是使用了觀察者模式,比如SpringMVC中的ServletContextListener等
  • 關(guān)聯(lián)變化的業(yè)務(wù)場景,比如某業(yè)務(wù)改變某個屬性,另外一個字段也必須跟著改變,并且未來業(yè)務(wù)還有更多的關(guān)聯(lián)字段變化,這個時候使用觀察者模式會有較好地擴(kuò)展。
  • 跨系統(tǒng)的消息傳遞交換,比如消息隊列的處理機(jī)制,里面大量運(yùn)用了觀察者模式
  • 總結(jié)

    觀察者模式是一種比較容易理解的代碼設(shè)計模式之一,在很多框架中都運(yùn)用到它,比如Spring、Tomcat、MQ設(shè)計中都有大量使用。雖然理解簡單,但用得好卻也不容易,比如需要考慮使用異步通知提高性能時通知可靠性等因素。

    鄭重聲明:本文內(nèi)容及圖片均整理自互聯(lián)網(wǎng),不代表本站立場,版權(quán)歸原作者所有,如有侵權(quán)請聯(lián)系管理員(admin#wlmqw.com)刪除。
    用戶投稿
    上一篇 2022年6月14日 12:33
    下一篇 2022年6月14日 12:33

    相關(guān)推薦

    • 30個無加盟費(fèi)的項目(茶顏悅色奶茶店加盟費(fèi)多少)

      茶顏悅色又爆了,8月18日,茶顏悅色南京門店正式開業(yè),開張不到半小時,門店就人滿為患,消費(fèi)者的購買熱情十分高漲,而由于人流量過大造成擁堵,茶顏悅色也不得不暫停營業(yè)。 當(dāng)然,這里面排…

      2022年11月27日
    • 凈利潤率越高越好嗎(凈利潤率多少合適)

      一、持續(xù)增收不增利,平均凈利潤率首次跌入個位數(shù) 2021年,增收不增利依舊是行業(yè)主流。具體來看,大部分企業(yè)營業(yè)收入呈增長態(tài)勢,E50企業(yè)平均同比增速達(dá)到17.3%,但是利潤增速則明…

      2022年11月26日
    • 英雄聯(lián)盟手游好玩嗎(英雄聯(lián)盟手游好玩還是端游好玩)

      簡要回答 非常好玩,英雄聯(lián)盟手游這款游戲已經(jīng)正式的進(jìn)行公測,這款游戲是以5v5為模式進(jìn)行對戰(zhàn)的,它是以英雄聯(lián)盟端游為原型進(jìn)行開發(fā),里面的每一種玩法基本都沿襲了端游的特點(diǎn)。 01 這…

      2022年11月25日
    • 規(guī)范透明促PPP高質(zhì)量發(fā)展——16萬億元大市場迎來新規(guī)

      近日,財政部印發(fā)《關(guān)于進(jìn)一步推動政府和社會資本合作(PPP)規(guī)范發(fā)展、陽光運(yùn)行的通知》,從做好項目前期論證、推動項目規(guī)范運(yùn)作、嚴(yán)防隱性債務(wù)風(fēng)險、保障項目陽光運(yùn)行四個方面進(jìn)一步規(guī)范P…

      2022年11月25日
    • 推薦3種白手起家的賺錢項目(白手起家賺錢項目有哪些)

      如今社會壓力非常的大,家有老少要養(yǎng)活,這些都加速了窮人想要創(chuàng)業(yè)的欲望,但是創(chuàng)業(yè)路總是那么的艱難,資金就是創(chuàng)業(yè)的重頭戲,所以選擇一個低成本又賺錢的項目是大多數(shù)人最期望的了,那么有哪些…

      2022年11月25日
    • 兩部門推出16條金融舉措促進(jìn)房地產(chǎn)市場平穩(wěn)健康發(fā)展

      新華社北京11月23日電(記者吳雨)中國人民銀行、銀保監(jiān)會23日公布《關(guān)于做好當(dāng)前金融支持房地產(chǎn)市場平穩(wěn)健康發(fā)展工作的通知》,推出16條金融舉措,促進(jìn)房地產(chǎn)市場平穩(wěn)健康發(fā)展。 兩部…

      2022年11月24日
    • 閑魚運(yùn)營的4大技巧解析(閑魚運(yùn)營怎么做)

      熟悉我又來了,上一次寫的文章是爆出風(fēng)水項目的潛規(guī)則,但那個項目已經(jīng)涼涼了。 這一次我是要教一些小白,你們第一次做互聯(lián)網(wǎng)的建議做的項目之一,這個項目就是閑魚賣二手物品賺差價了!!! …

      2022年11月24日
    • 新版找不到切換農(nóng)村淘寶(現(xiàn)在怎么找不到農(nóng)村淘寶了)

      2017年農(nóng)村淘寶APP升級為手機(jī)淘寶家鄉(xiāng)版,于是手機(jī)淘寶就分為兩個版本,一個家鄉(xiāng)版和標(biāo)準(zhǔn)版。今年五一假期一過淘寶又發(fā)出新公告將陸續(xù)升級! 左邊為標(biāo)準(zhǔn)版,右邊為家鄉(xiāng)版 據(jù)公告,升級…

      2022年11月24日
    • 1千克等于多少磅

      克,此定義在1958年被美國以及其他英聯(lián)邦會員國承認(rèn)換算回來,一千克等于262磅,一磅等于037千克英國在1963年開始,依據(jù)度量衡法案的規(guī);1 磅=16 盎司=04536 千克 …

      2022年11月24日
    • 2023年農(nóng)村創(chuàng)業(yè)最好的種植項目有哪些(2023年農(nóng)村宅基地)

      隨著2023年時間的臨近,有關(guān)農(nóng)村創(chuàng)業(yè)大家也都十分關(guān)注。2023年農(nóng)村創(chuàng)業(yè)最好的種植項目有哪些?新的一年農(nóng)村創(chuàng)業(yè)到底做什么最能賺錢呢?今天小編整理了一些非常具有發(fā)展?jié)摿Φ霓r(nóng)村種植業(yè)…

      2022年11月23日

    聯(lián)系我們

    聯(lián)系郵箱:admin#wlmqw.com
    工作時間:周一至周五,10:30-18:30,節(jié)假日休息