再看設計模式——觀察者模式,設計模式觀察者模式

來源:互聯網
上載者:User

再看設計模式——觀察者模式,設計模式觀察者模式

      隨著軟考的進行,開始了新一輪設計模式的學習,距離上一次這種整體、從頭到尾學習設計模式已經有一段時間了。上次整體上的學習中,主要是瞭解,簡單的使用設計模式。隨著這一段時間的接觸,潛移默化,這次的學習,相對深入一些。下面我以觀察者模式為例,記錄一下這次設計模式的學習。(以Head First 設計模式為主要材料)。

      1、複習什麼是觀察者模式

       我們看看報紙和雜誌的訂閱是怎麼回事:報社的業務就是出版報紙向某家報社訂閱報紙,只要他們有新報紙出版,就會給你送來。只要你是他們的訂戶,你就會一直收到新報紙當你不想再看報紙的時候,取消訂閱,他們就不會再送新報紙來只要報社還在運營,就會一直有人(或單位)向他們訂閱報紙或取消訂閱報紙。如果你瞭解報紙的訂閱是怎麼回事,其實就知道觀察者模式是怎麼回事,只是名稱不太一樣:出版者改稱為“主題”(Subject),訂閱者改稱為“觀察者”(Observer)。觀察者模式,關係:


      2、觀察者模式定義

      當你試圖勾勒觀察者模式時,可以利用報紙訂閱服務,以及出版者和訂閱者比擬這一切在真實的世界中,你通常會看到觀察者模式被定義成:
                 a.觀察者模式定義了對象之間的一對多依賴,這樣一來,當一個對象改變狀態時,它的所有依賴者都會收到通知並自動更新
                 b.觀察者模式定義了一系列對象之間的一對多關聯性
                 c.當一個對象改變狀態,其他依賴者都會收到通知

      3、觀察者 模式類圖


      當兩個對象之間松耦合,它們依然可以互動,但是不太清楚彼此的細節觀察者模式提供了一種對象設計,讓主題和觀察者之間松耦合為什嗎?
      關於觀察者的一切,主題只知道觀察者實現了某個介面(也就是Observer介面)。主題不需要知道觀察者的具體類是誰、做了些什麼或其他任何細節。

      任何時候我們都可以增加新的觀察者
      因為主題唯一依賴的東西是一個實現Observer介面的對象列表,所以我們可以隨時增加觀察者事實上,在運行時我們可以用新的觀察者取代現有的觀察者,主題不會受到任何影響。同樣的,也可以在任何時候刪除某些觀察者。

      我們可以獨立地複用主題或觀察者
      如果我們在其他地方需要使用主題或觀察者,可以輕易地複用,因為二者並非緊耦合。

      改變主題或觀察者其中一方,並不會影響另一方
      因為兩者是松耦合的,所以只要他們之間的介面仍被遵守,我們就可以自由地改變他們。

      4.程式碼範例

      以氣象站的例子為例(例子來自head first 設計模式)

      類圖如下:

      

      氣象站主題代碼如下


      在WeatherData中實現主題介面


      建立布告板代碼


      都建立成功之後,可以建立如下測試才程式


      可以得到如下結果


      總結

      到目前為止,這個設計模式的學習基本上是完善了。在一次學習,也是一次補充和加深的過程,有很多以前無法理解,不好理解或者不懂的問題,在這次學習中,基本上都解決了。一次次的學習和複習,一定會有很好的效果。畢竟,學習就是反覆的過程。




聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.