觀察者模式和發佈訂閱模式有什麼區別?大多數的回答都是:Publishers + Subscribers = Observer Pattern,24種基本的設計模式並沒有發佈-訂閱模式,發佈訂閱模式屬於併發型模式;像典型的Mq;這兩種相似單並不可以劃等號。 ...
觀察者模式和發佈訂閱模式有什麼區別?大多數的回答都是:Publishers + Subscribers = Observer Pattern,24種基本的設計模式並沒有發佈-訂閱模式,發佈訂閱模式屬於併發型模式;像典型的Mq;這兩種相似單並不可以劃等號。 我們來重新來回顧一下這兩種模式:
Observer Pattern
觀察者模式定義了對象之間的一對多依賴,這樣一來,當一個對象改變狀態時,它的所有依賴者都會收到通知並自動更新。而觀察者模式屬於行為型模式,行為型模式關註的是對象之間的通訊,觀察者模式就是觀察者和被觀察者之間的通訊。觀察者模式有一個別名叫“訂閱—發佈模式”。報紙大家都訂過吧,當你訂閱了一份報紙,每天都會有一份最新的報紙送到你手上,有多少人訂閱報紙,報社就會發多少份報紙,這是典型的訂閱—發佈模式,報社和訂報紙的客戶就是上面文章開頭所說的“一對多”的依賴關係。
Pub-Sub Pattern
在“發佈者-訂閱者”模式中,稱為發佈者的消息發送者不會將消息編程為直接發送給稱為訂閱者的特定接收者。這意味著發佈者和訂閱者不知道彼此的存在。存在第三個組件,稱為代理或消息代理或事件匯流排,它由發佈者和訂閱者都知道,它過濾所有傳入的消息並相應地分發它們。換句話說,pub-sub是用於在不同系統組件之間傳遞消息的模式,而這些組件不知道關於彼此身份的任何信息。經紀人如何過濾所有消息?實際上,有幾個消息過濾過程。最常用的方法有:基於主題和基於內容的。簡而言之,這兩種模式之間的主要區別可以如下所示:
- 在Observer模式中,Observers知道Subject,同時Subject還保留了Observers的記錄。然而,在發佈者/訂閱者中,發佈者和訂閱者不需要彼此瞭解。他們只是在消息隊列或代理的幫助下進行通信。
- 在Publisher / Subscriber模式中,組件是鬆散耦合的,而不是Observer模式。
- 觀察者模式主要以同步方式實現,即當某些事件發生時,Subject調用其所有觀察者的適當方法。發佈者/訂閱者在大多情況下是非同步方式(使用消息隊列)。
- 觀察者模式需要在單個應用程式地址空間中實現。另一方面,發佈者/訂閱者模式更像是跨應用程式模式。
儘管這些模式之間存在差異,但有些人可能會說發佈者 - 訂閱者模式是觀察者模式的變體,因為它們之間存在概念上的相似性,但並不是一樣的,歡迎拍磚!
參考文檔:https://hackernoon.com/observer-vs-pub-sub-pattern-50d3b27f838c