淺談觀察者模式和釋出訂閱者模式的微妙區別

志文軒發表於2018-11-26

觀察者模式和釋出訂閱者模式
圖片來源

觀察者模式理解

一個物件(稱為主體subject)維持一系列依賴於它的物件(稱為觀察者observer),將有關狀態的任何變更自動通知給它們(觀察者)。

通俗點講:有一個主體物件,這個物件裡面存著很多觀察者,物件有什麼變化,就統一告訴觀察者。

例子:一個老師(主體subject),他有一班的學生(維持一堆觀察者),老師說交作業啦(通知交作業),然後學生統一交作業。

釋出訂閱者模式理解

基於一個主題/事件通道,希望接收通知的物件(稱為訂閱者subscriber)通過自定義事件訂閱主題,啟用事件的物件(稱為釋出者publisher)通過釋出主題事件的方式來通知訂閱者。

通俗點講:有一箇中間介質(主題/事件通道),訂閱者可以訂閱這個主題,並自定義當這個主題釋出時,它要做什麼(事件);而釋出者主要釋出這個主題,從而觸發訂閱者自定義的事件。

例子:手機的日曆提醒功能。中間介質:手機的日曆軟體。訂閱者:使用者,比如小明設定提醒早上八點去打球,小強設定提醒早上八點去跑步,他們都是訂閱了早上八點提醒這個主題,但是自定義的事不一樣。釋出者:手機日曆的後臺,早上八點它會傳送提醒(釋出主題)。

區別

觀察者模式要求必須訂閱狀態改變的事件,定義一對多的依賴關係。比如學生要知道交作業的通知,老師和學生一對多。釋出訂閱者模式有一個主題/事件通道,介於訂閱和釋出者之間。比如手機日曆軟體。

觀察者模式中觀察者接收到通知後做的事是一樣的,比如學生接收到交作業通知後都去交作業。釋出訂閱者模式,訂閱者可以在主題釋出時做不同的事,比如小明去打球,小強去跑步。

耦合度方面觀察者模式比較高。

後記

以上是我對觀察者模式和釋出訂閱者模式的理解,如有錯誤或不足之處,懇請各位大佬指正!有幫助的話,留個贊再走唄^ ^

參考

不好意思,觀察者模式跟釋出訂閱模式就是不一樣

相關文章