亚洲精品中文免费|亚洲日韩中文字幕制服|久久精品亚洲免费|一本之道久久免费

      
      

            <dl id="hur0q"><div id="hur0q"></div></dl>

                簡(jiǎn)單學(xué)代碼設(shè)計(jì)模式-觀察者模式

                簡(jiǎn)單學(xué)代碼設(shè)計(jì)模式-觀察者模式

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

                觀察者模式的定義

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

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

                Subject(被觀察者)

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

                Observer(觀察者)

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

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

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

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

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

                Code Time

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

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

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

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

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

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

                干活的張三因?yàn)轫?xiàng)目延期了,其他觀察張三的觀察者果然都做出了自己的處理,HR招人,PM催加班,市場(chǎng)重新規(guī)劃……

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

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

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

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

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

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

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

                相關(guān)推薦

                • 30個(gè)無(wú)加盟費(fèi)的項(xiàng)目(茶顏悅色奶茶店加盟費(fèi)多少)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

                  2022年11月23日

                聯(lián)系我們

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