2022年2月1日 星期二

[Geroge]設計模式-觀察者模式Observer Pattern (下)

推模式

被觀察者對象向觀察者推送主題的詳細信息, 不管觀察者是否需要, 推送的信息通常是主題對象的全部或部分數據, 一般這種模型的現實中, 會把被觀察者對象中的全部或部分信息通過update的參數傳遞給觀察者 update(Object obj)

拉模式

被觀察者在通知觀察者的時候, 只傳遞少量信息, 如果觀察者需要更具體的信息, 由觀察者主動到被觀察者對象中獲取, 相當於是觀察者從被觀察者中拉數據

一般這種模型的實現中, 會把被觀察者對象自身通過update方法傳遞給觀察者update(Subject subject)這樣在觀察者需要獲取數據的時候, 就可以通過這個引用來獲取了

例子:

推模式

就是會推送信息, 我們就先造出信息類Weather, 用來放溫度和濕度











觀察者抽象類, update時傳送信息Weather物件






而subject實體類, 就是氣象站, 這裡當溫度或濕度改變的時候
我們必須產生Weather物件當作信息, 推送給觀察者








推送, 就是向已經註冊在列表中的觀察者, 去進行update並把Weather信息傳過去










觀察者物件被調用update時, 就會依照傳過來的Weather進行反應











這是整體進行的程式碼, 過程中看不到Weather物件, 是因為設置傳送Weather物件都在內部進行
















拉模式
相當於說觀察者更新的時候, 是傳送real subject過去, 就是傳氣象站過去




老王和小李則是獲得Weather Station對向作判斷















那我們Weather Station也會發生變化, 就是推送它自己了, 而不是Weather物件











當它改變溫度或濕度的時候, 我們只要調用notifyObserver()






重述一下拉模式重點

首先, 我們的Subject中的notifyObserver就不用傳訊息物件過去

另外我們的Observer類別需要傳Subject實體類過去















兩種模式的對比

推模式

優點: 很好保護了subject 降低觀察者與具體subject的耦合度

缺點: 當變化的參數繁多的時候, 觀察者將收到大量無關信息

拉模式

優點: 變化時對觀察者根據需要去取相應數據

缺點: 觀察者與具體subject的耦合度大大增加

https://www.youtube.com/watch?v=cA-vt0Nf1nQ&list=PLGmd9-PCMLhb16ZxeSy00qUsBazXgJyfM&index=20

https://github.com/iw5420/geroge-design-pattern


沒有留言:

張貼留言

[leetcode] [KMP] KMP

ABCDABD... ABCDABF... 簡單的說, 傳統解兩字串匹配部分 可能會來個雙迴圈, 哀個比對, 當不匹配的時候, 會將下方列再後移1位 然後不匹配再後移 然而 如果像上放已經有4個屬於匹配的字串, 她就應該直接往後移四位來匹配, 而不是只移動1位 隱藏的思維是, 當...