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

2022-09-24 03:36:11 字數 1099 閱讀 1911

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

觀察者模式和發布訂閱模式有什麼區別?大多數的回答都是:publishers + subscribers = observer pattern,24種基本的設計模式並沒有發布-訂閱模式,發布訂閱模式屬於並髮型模式;像典型的mq;這兩種相似單並不可以劃等號。 我們來重新來回顧一下這兩種模式:

observer pattern 觀察者模式定義了物件之間的一對多依賴,這樣一來,當乙個物件改變狀態時,它的所有依賴者都會收到通知並自動更新。而觀察者模式屬於行為型模式,行為型模式關注的是物件之間的通訊,觀察者模式就是觀察者和被觀察者之間的通訊。

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

pub-sub pattern 在「發布者-訂閱者」模式中,稱為發布者的訊息傳送者不會將訊息程式設計為直接傳送給稱為訂閱者的特定接收者。這意味著發布者和訂閱者不知道彼此的存在。存在第三個元件,稱為**或訊息**或事件匯流排,它由發布者和訂閱者都知道,它過濾所有傳入的訊息並相應地分發它們。換句話說,pub-sub是用於在不同系統元件之間傳遞訊息的模式,而這些元件不知道關於彼此身份的任何資訊。經紀人如何過濾所有訊息?實際上,有幾個訊息過濾過程。最常用的方法有:基於主題和基於內容的。

簡而言之,這兩種模式之間的主要區別可以如下所示:

在observer模式中,observers知道subject,同時subject還保留了observers的記錄。然而,在發布者/訂閱者中,發布者和訂閱者不需要彼此了解。他們只是在訊息佇列或**的幫助下進行通訊。

在publisher / subscriber模式中,元件是鬆散耦合的,而不是observer模式。

觀察者模式主要以同步方式實現,即當某些事件發生時,subject呼叫其所有觀察者的適當方法。發布者/訂閱者在大多情況下是非同步方式(使用訊息佇列)。

觀察者模式需要在單個應用程式位址空間中實現。另一方面,發布者/訂閱者模式更像是跨應用程式模式。

儘管這些模式之間存在差異,但有些人可能會說發布者 - 訂閱者模式是觀察者模式的變體,因為它們之間存在概念上的相似性,但並不是一樣的,歡迎拍磚!

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

有些人認為觀察者模式就是發布訂閱模式,實際上觀察者模式是包含了訂閱發布模式,發布訂閱模式只是觀察者模式中的一種。觀察者模式是觀察者和被觀察者之間的通訊,而發布訂閱模式中間增加了乙個中轉層,通過第三方來分發資訊。subject為被觀察者,subject中的狀態 state 改變,就通知 observe...

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

兩者有什麼區別?一搜一大堆,一篇比一篇長,一篇比一篇專業。傻傻分不清楚。還是舉個例子吧。觀察者模式 我辦了乙個補習班,學生想來我這學習,必須先報名 註冊 收齊一幫學生,開始教學,學生們聽了我的課及時更新了自己的認知。我和學生們緊密相連。每個人我都認識。後者比前者多了乙個類似中轉站的東西 姑且稱為 中...

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

有這麼一段 經常會出現在 中 1 var pubsub 3function subscribe topic,fn 7topics topic push fn 8 9function publish topic,args 15 16return 20 測試 1 pubsub.subscribe tes...