您的位置:首頁(yè) > 軟件教程 > 教程 > 觀察者模式:行為設(shè)計(jì)模式的介紹和實(shí)現(xiàn)

觀察者模式:行為設(shè)計(jì)模式的介紹和實(shí)現(xiàn)

來(lái)源:好特整理 | 時(shí)間:2024-06-06 09:45:59 | 閱讀:61 |  標(biāo)簽: 觀察者 設(shè)計(jì)   | 分享到:

設(shè)計(jì)模式 【設(shè)計(jì)模式】工廠方法模式 【設(shè)計(jì)模式】抽象工廠模式 【設(shè)計(jì)模式】單例模式 【設(shè)計(jì)模式】策略模式 【設(shè)計(jì)模式】觀察者模式 一、介紹 觀察者模式是一種行為設(shè)計(jì)模式,當(dāng)一個(gè)對(duì)象的狀態(tài)發(fā)生改變時(shí),依賴(觀察)它的對(duì)象會(huì)接收到通知,并進(jìn)行自動(dòng)的更新操作。 舉例:某公司發(fā)布了一款新的手機(jī),性能很強(qiáng)大,

觀察者模式是一種行為設(shè)計(jì)模式,它允許對(duì)象在狀態(tài)發(fā)生改變時(shí)通知其依賴者,并自動(dòng)進(jìn)行更新操作。這篇文章將介紹觀察者模式的優(yōu)缺點(diǎn)、核心結(jié)構(gòu)以及在PHP中的代碼實(shí)現(xiàn)。

設(shè)計(jì)模式

  • 【設(shè)計(jì)模式】工廠方法模式
  • 【設(shè)計(jì)模式】抽象工廠模式
  • 【設(shè)計(jì)模式】單例模式
  • 【設(shè)計(jì)模式】策略模式
  • 【設(shè)計(jì)模式】觀察者模式

一、介紹

觀察者模式是一種行為設(shè)計(jì)模式,當(dāng)一個(gè)對(duì)象的狀態(tài)發(fā)生改變時(shí),依賴(觀察)它的對(duì)象會(huì)接收到通知,并進(jìn)行自動(dòng)的更新操作。

舉例:某公司發(fā)布了一款新的手機(jī),性能很強(qiáng)大,許多人都想買,但是該公司又沒(méi)宣布售賣時(shí)間。想買的人為了第一時(shí)間就擁有這臺(tái)手機(jī),就必須每天到官網(wǎng)或線下實(shí)體店看有沒(méi)有出售,這樣對(duì)于用戶來(lái)說(shuō)體驗(yàn)很不好。如果不想頻繁的去查看,這時(shí)想買手機(jī)的用戶就可以在實(shí)體店或網(wǎng)站上留下聯(lián)系方式,等到手機(jī)出售的當(dāng)天公司通過(guò)郵件或者短信的形式通知到購(gòu)買者。

二、優(yōu)缺點(diǎn)

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

  • 符合開(kāi)閉原則。 無(wú)需修改發(fā)布者代碼就能引入新的觀察者類。
  • 可以在運(yùn)行時(shí)建立對(duì)象之間的聯(lián)系。

缺點(diǎn):

  • 無(wú)法設(shè)置訂閱者收到的順序
  • 當(dāng)觀察者對(duì)象很多時(shí),通知的發(fā)布會(huì)花費(fèi)很多時(shí)間,影響程序的效率

三、核心結(jié)構(gòu)

  • Subject(目標(biāo)):被觀察者,它是指被觀察的對(duì)象。 類中有一個(gè)用來(lái)存放觀察者對(duì)象的容器,這個(gè)容器是被觀察者類的核心。其中還有幾個(gè)方法:
    • attach方法是向這個(gè)容器中添加觀察者對(duì)象。
    • detach方法是從容器中移除觀察者對(duì)象。
    • notify方法是依次調(diào)用觀察者對(duì)象的對(duì)應(yīng)方法。
  • ConcreteSubject(具體目標(biāo)):目標(biāo)類的具體子類,當(dāng)它的狀態(tài)發(fā)生改變時(shí),向它的各個(gè)觀察者發(fā)出通知。同時(shí)它還實(shí)現(xiàn)了在目標(biāo)類中定義的抽象業(yè)務(wù)邏輯方法(如果有的話)。
  • Observer(觀察者):觀察者將對(duì)觀察目標(biāo)的改變做出反應(yīng),觀察者一般定義為接口,該接口聲明了更新數(shù)據(jù)的方法 update()。
  • ConcreteObserver(具體觀察者):在具體觀察者中維護(hù)一個(gè)指向具體目標(biāo)對(duì)象的引用,它存儲(chǔ)具體觀察者的有關(guān)狀態(tài),這些狀態(tài)需要和具體目標(biāo)的狀態(tài)保持一致,它實(shí)現(xiàn)了在觀察者 Observer 中定義的 update()方法。

四、代碼實(shí)現(xiàn)

1、在PHP中已經(jīng)有相關(guān)的Subject(目標(biāo))和Observer(觀察者)接口了,我們可以拿來(lái)直接實(shí)現(xiàn)。分別是SplSubject和SplObserver接口,以下代碼就是以這兩個(gè)接口為例進(jìn)行編寫。其中還用到一個(gè)SplObjectStorage類,它也是PHP中的一個(gè)類,用于存儲(chǔ)和管理對(duì)象。它是一個(gè)關(guān)聯(lián)數(shù)組,其中鍵是對(duì)象的哈希值,值是對(duì)象本身。

1.1、實(shí)現(xiàn)ConcreteSubject(具體目標(biāo))

1.2、實(shí)現(xiàn)ConcreteObserver(具體觀察者),我這里實(shí)現(xiàn)了兩個(gè)觀察者,分別為 ConcreteObserverB 和?ConcreteObserverA。

1.3、客戶端調(diào)用

1.4、客戶端調(diào)用結(jié)果展示

觀察者模式:行為設(shè)計(jì)模式的介紹和實(shí)現(xiàn)

2、上面介紹了使用PHP本身觀察者設(shè)計(jì)模式的接口,下面就自己手寫一個(gè)觀察者模式。

2.1、實(shí)現(xiàn)Subject(目標(biāo))接口

2.2、實(shí)現(xiàn)ConcreteSubject(具體目標(biāo))

2.3、實(shí)現(xiàn)Observer(觀察者)

2.4、實(shí)現(xiàn)ConcreteObserver(具體觀察者),分別為 ConcreteObserverB 和?ConcreteObserverA。

2.5、客戶端調(diào)用

2.6、運(yùn)行結(jié)果展示

觀察者模式:行為設(shè)計(jì)模式的介紹和實(shí)現(xiàn)

小編推薦閱讀

好特網(wǎng)發(fā)布此文僅為傳遞信息,不代表好特網(wǎng)認(rèn)同期限觀點(diǎn)或證實(shí)其描述。

觀察者 1.0
觀察者 1.0
類型:休閑益智  運(yùn)營(yíng)狀態(tài):正式運(yùn)營(yíng)  語(yǔ)言:中文   

游戲攻略

游戲禮包

游戲視頻

游戲下載

游戲活動(dòng)

《觀察者》是無(wú)不游工作室開(kāi)發(fā)的一款趣味十足的休閑闖關(guān)游戲,游戲玩法非常的多樣化,并且設(shè)計(jì)者還在游戲

相關(guān)視頻攻略

更多

掃二維碼進(jìn)入好特網(wǎng)手機(jī)版本!

掃二維碼進(jìn)入好特網(wǎng)微信公眾號(hào)!

本站所有軟件,都由網(wǎng)友上傳,如有侵犯你的版權(quán),請(qǐng)發(fā)郵件[email protected]

湘ICP備2022002427號(hào)-10 湘公網(wǎng)安備:43070202000427號(hào)© 2013~2025 haote.com 好特網(wǎng)