觀察者和發佈訂閱模式的區別

         觀察者模式和發佈訂閱模式有什麼區別?大多數的回答都是: Publishers + Subscribers = Observer Pattern,24種基本的設計模式並無發佈-訂閱模式,發佈訂閱模式屬於併發型模式;像典型的Mq;這兩種類似單並不能夠劃等號。
咱們來從新來回顧一下這兩種模式:

       Observer Pattern

         觀察者模式定義了對象之間的 一對多依賴,這樣一來,當一個對象改變狀態時,它的全部依賴者都會收到通知並自動更新。 而觀察者模式屬於行爲型模式,行爲型模式關注的是對象之間的通信,觀察者模式就是觀察者和被觀察者之間的通信。

觀察者模式有一個別名叫「訂閱—發佈模式」。報紙你們都訂過吧,當你訂閱了一份報紙,天天都會有一份最新的報紙送到你手上,有多少人訂閱報紙,報社就會發多少份報紙,這是典型的訂閱—發佈模式,報社和訂報紙的客戶就是上面文章開頭所說的「一對多」的依賴關係。編程

 

       Pub-Sub  Pattern

         在「發佈者-訂閱者」模式中,稱爲發佈者的消息發送者不會將消息編程爲直接發送給稱爲訂閱者的特定接收者。 這意味着發佈者和訂閱者不知道彼此的存在。存在第三個組件,稱爲代理或消息代理或事件總線,它由發佈者和訂閱者都知道,它過濾全部傳入的消息並相應地分發它們。換句話說,pub-sub是用於在不一樣系統組件之間傳遞消息的模式,而這些組件不知道關於彼此身份的任何信息。經紀人如何過濾全部消息?實際上,有幾個消息過濾過程。最經常使用的方法有:基於主題和基於內容的。

        簡而言之,這兩種模式之間的主要區別能夠以下所示:設計模式

 
  1. 在Observer模式中,Observers知道Subject,同時Subject還保留了Observers的記錄。然而,在發佈者/訂閱者中,發佈者和訂閱者不須要彼此瞭解。他們只是在消息隊列或代理的幫助下進行通訊。
  2. 在Publisher / Subscriber模式中,組件是鬆散耦合的,而不是Observer模式
  3. 觀察者模式主要以同步方式實現,即當某些事件發生時,Subject調用其全部觀察者的適當方法。發佈者/訂閱者在大多狀況下是異步方式(使用消息隊列)。
  4. 觀察者模式須要在單個應用程序地址空間中實現。另外一方面,發佈者/訂閱者模式更像是跨應用程序模式。

         儘管這些模式之間存在差別,但有些人可能會說發佈者 - 訂閱者模式是觀察者模式的變體,由於它們之間存在概念上的類似性,但並非同樣的,歡迎拍磚! 併發

         參考文檔:https://hackernoon.com/observer-vs-pub-sub-pattern-50d3b27f838c異步

相關文章
相關標籤/搜索