免费爱碰视频在线观看,九九精品国产屋,欧美亚洲尤物久久精品,1024在线观看视频亚洲

      簡單學代碼設計模式-觀察者模式

      簡單學代碼設計模式-觀察者模式

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

      觀察者模式的定義

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

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

      Subject(被觀察者)

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

      Observer(觀察者)

      觀察者接收到變更消息后,就會進行對應的方法操作,對接收到的信息進行處理。

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

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

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

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

      Code Time

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

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

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

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

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

      運行上述代碼的結果是:

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

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

      優(yōu)點

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

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

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

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

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

      相關推薦

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        2022年11月23日

      聯(lián)系我們

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