iT邦幫忙

2022 iThome 鐵人賽

DAY 7
0
自我挑戰組

設計模式探索系列 第 7

[Day 7] 觀察者模式 (2)

  • 分享至 

  • xImage
  •  

觀察者模式的情境

所謂的觀察者模式,顧名思義,主要就是由兩個角色所組成:觀察者(observer)被觀察者(subject);也可以用發布者訂閱者來想像它們之間的關係。

  • 發布者: 管理一些資料,每當其中的資料改變,就發布通知,並用某種形式將資料傳給觀察者。對應前面舉的例子,可以查詢天氣資料並在天氣變化時發送通知的WeatherData就是一種發佈者。
  • 訂閱者: 向發佈者訂閱,如此就會收到發佈者的通知,並做出對應的反應。在前面的例子中,我們需要設計的各種顯示器就是關心WeatherData的訂閱者。此外,觀察者藉由訂閱去成為發佈者的通知對象,並可以選擇退訂來不再收到發布者的通知。

記得前面所說的一對多嗎?在觀察者模式就是以一個被觀察者與多個觀察者的關係來進行設計。

觀察者模式定義 (Observer)

精確的觀察者模式定義如下:

觀察者模式定義物件之間的一對多依賴關係,當一個物件改變狀態時,依賴它的物件都會自動收到通知與更新

此模式非常常見,有多種實作方式,但都可以發現到其中的subjectobserver關係。

觀察者模式類別圖

觀察者模式以以下結構來實現:
https://ithelp.ithome.com.tw/upload/images/20220921/20140096hsKEJeYs1a.png
此模式還可以達到 鬆耦合(loosely coupled) 的效果。接下來,我們就來看鬆耦合與第四條原則。
並想想看,應用了觀察者模式後,要怎麼改寫前面的氣象應用程式呢?


上一篇
[Day 6] 觀察者模式 (1)
下一篇
[Day 8] 觀察者模式 (3)
系列文
設計模式探索30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言