日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > asp.net >内容正文

asp.net

[java设计模式简记] 观察者模式(Observer-Pattern)

發(fā)布時(shí)間:2023/12/13 asp.net 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [java设计模式简记] 观察者模式(Observer-Pattern) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

觀察者模式(Observer-Pattern)

數(shù)據(jù)主體擁有需要數(shù)據(jù)的對(duì)象的數(shù)據(jù),并且數(shù)據(jù)改變時(shí)需要數(shù)據(jù)的對(duì)象要及時(shí)知道

意圖: 定義對(duì)象間的一種一對(duì)多的依賴關(guān)系,當(dāng)一個(gè)對(duì)象的狀態(tài)發(fā)生改變時(shí),所有依賴于它的對(duì)象都得到通知并被自動(dòng)更新。
主要解決: 一個(gè)對(duì)象狀態(tài)改變給其他對(duì)象通知的問題,而且要考慮到易用和低耦合,保證高度的協(xié)作。
何時(shí)使用: 一個(gè)對(duì)象(目標(biāo)對(duì)象)的狀態(tài)發(fā)生改變,所有的依賴對(duì)象(觀察者對(duì)象)都將得到通知,進(jìn)行廣播通知。
如何解決: 使用面向?qū)ο蠹夹g(shù),可以將這種依賴關(guān)系弱化。
關(guān)鍵代碼: 在抽象類里有一個(gè) ArrayList 存放觀察者們。
應(yīng)用實(shí)例:

  • 拍賣的時(shí)候,拍賣師觀察最高標(biāo)價(jià),然后通知給其他競(jìng)價(jià)者競(jìng)價(jià)。
  • 西游記里面悟空請(qǐng)求菩薩降服紅孩兒,菩薩灑了一地水招來(lái)一個(gè)老烏龜,這個(gè)烏龜就是觀察者,他觀察菩薩灑水這個(gè)動(dòng)作。
  • 優(yōu)點(diǎn):

  • 觀察者和被觀察者是抽象耦合的。
  • 建立一套觸發(fā)機(jī)制。
  • 缺點(diǎn):

  • 如果一個(gè)被觀察者對(duì)象有很多的直接和間接的觀察者的話,將所有的觀察者都通知到會(huì)花費(fèi)很多時(shí)間。
  • 如果在觀察者和觀察目標(biāo)之間有循環(huán)依賴的話,觀察目標(biāo)會(huì)觸發(fā)它們之間進(jìn)行循環(huán)調(diào)用,可能導(dǎo)致系統(tǒng)崩潰。
  • 觀察者模式?jīng)]有相應(yīng)的機(jī)制讓觀察者知道所觀察的目標(biāo)對(duì)象是怎么發(fā)生變化的,而僅僅只是知道觀察目標(biāo)發(fā)生了變化。
  • 使用場(chǎng)景:

  • 一個(gè)抽象模型有兩個(gè)方面,其中一個(gè)方面依賴于另一個(gè)方面。將這些方面封裝在獨(dú)立的對(duì)象中使它們可以各自獨(dú)立地改變和復(fù)用。
  • 一個(gè)對(duì)象的改變將導(dǎo)致其他一個(gè)或多個(gè)對(duì)象也發(fā)生改變,而不知道具體有多少對(duì)象將發(fā)生改變,可以降低對(duì)象之間的耦合度。
  • 一個(gè)對(duì)象必須通知其他對(duì)象,而并不知道這些對(duì)象是誰(shuí)。
  • 需要在系統(tǒng)中創(chuàng)建一個(gè)觸發(fā)鏈,A對(duì)象的行為將影響B(tài)對(duì)象,B對(duì)象的行為將影響C對(duì)象……,可以使用觀察者模式創(chuàng)建一種鏈?zhǔn)接|發(fā)機(jī)制。
  • 注意事項(xiàng):

  • JAVA 中已經(jīng)有了對(duì)觀察者模式的支持類。
  • 避免循環(huán)引用。
  • 如果順序執(zhí)行,某一觀察者錯(cuò)誤會(huì)導(dǎo)致系統(tǒng)卡殼,一般采用異步方式。
  • JAVA中內(nèi)置的Observer在jdk9時(shí)被標(biāo)記已丟棄,替代方案為
    如果用Observable寫的對(duì)象事件訂閱機(jī)制,推薦用java.beans相關(guān)的類來(lái)代替。
    如果用Observable寫的進(jìn)程間通信機(jī)制,文檔推薦用java.util.concurrent并行庫(kù)相關(guān)的類來(lái)代替。
    如果用Observable寫的反應(yīng)式流水線機(jī)制,文檔推薦用并行庫(kù)的Flow及Future等類來(lái)代替。
    如果僅僅是為了實(shí)現(xiàn)觀察者設(shè)計(jì)模式,可以寫自定義的類...或直接剪貼源碼
  • 轉(zhuǎn)載于:https://www.cnblogs.com/xiong233/p/10945036.html

    總結(jié)

    以上是生活随笔為你收集整理的[java设计模式简记] 观察者模式(Observer-Pattern)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。