觀察者vs發布訂閱vs中介模式 2020-09-14

摘自
https://www.cnblogs.com/BOT-Man/p/7637308.html
https://cloud.tencent.com/developer/article/1612544

觀察者vs中介者

  • 觀察者 (observer) 模式和 中介者 (mediator) 模式
    • 調用流程非常相似
    • 網上相關資料、代碼對兩者區別的解釋不夠清楚
    • 兩個設計模式在 圖形界面 (GUI) 編程中,被廣泛使用
  • 學習的過程是:不知道 -> 知道 -> 能向別人解釋清楚

基本概念

首先需要知道 回調函數的基本概念 。。

觀察者 (observer) 模式

  • 通過 訂閱-發布 (subscribe-publish) 模型,消除組件之間雙向依賴
  • 消息的 發布者 (subject) 不需要知道 觀察者 (observer) 的存在
  • 兩者只需要約定消息的格式(如何訂閱、如何發布),就可以通信
  • 筆記鏈接

中介者 (mediator) 模式

  • 通過設置 消息中心 (message center),避免組件之間直接依賴
  • 所有的 協同者 (colleague) 只能通過 中介者 (mediator) 進行通信,
    而相互之間不知道彼此的存在
  • 當各個組件的消息出現循環時,消息中心可以消除組件之間的依賴混亂
  • 筆記鏈接

兩者的聯系

  • 中介者模式 一般通過 觀察者模式 實現
    • 協同者 作為 發布者,中介者 作為 觀察者
    • 協同者 發布消息 -> 中介者 收到并處理消息 -> 中介者 直接發送消息給 協同者
    • 協同者 不依賴于 中介者
  • 當組件之間依賴關系簡單時,可以直接使用 觀察者模式
  • 當組件之間依賴關系復雜是,需要借助 中介者模式 梳理關系

觀察者vs發布訂閱

3、發布訂閱模式

(1)理解

當你了解了觀察者模式房東—租客這種模型以后,你會發現,如果觀察者很多,那么房東壓力還是挺大的,比如收錢的壓力。
這個時候,房東每天簽合同、收房租跑斷腿,不堪其擾,于是就去拜托中介,交給中介打理省心,于是就有了類似于房東—中介—租客的這種發布訂閱模式。

(2)實踐

首先我們需要定義一下中介機構:
  • EventBus這個就是相當于扮演了中介機構的角色。
  • emit發布就相當于是房東。房東不定時隨機的發布消息,說某某套房子空了。
  • on訂閱就相當于是房客,訂閱某個戶型的事件了以后就可以實時收到該戶型的通知。

4、小結

  • 通過上面這些示例,兩者之間最大的區別就是中介結構這一環,通過這個機構,房東和房客之間的溝通更加的順暢了,也就是兩者之間松耦合,這樣的話,我們開發的時候可以將中介結構抽離成為了一個單獨的文件,這樣使得業務邏輯更加清晰,維護起來也更加的區別。不管這兩者模式是相同還是不同的,這個我覺得是最主要的區別。
  • 其它的我這里直接引用這篇文章的小結概況一下吧,我覺得這位大佬總結還是比較到位的:
    1. 在觀察者模式中,觀察者是知道Subject的,Subject一直保持對觀察者進行記錄。然而,在發布訂閱模式中,發布者和訂閱者不知道對方的存在。它們只有通過消息代理進行通信。
    2. 在發布訂閱模式中,組件是松散耦合的,正好和觀察者模式相反。
    3. 觀察者模式大多數時候是同步的,比如當事件觸發,Subject就會去調用觀察者的方法。而發布-訂閱模式大多數時候是異步的(使用消息隊列)。
    4. 觀察者 模式需要在單個應用程序地址空間中實現,而發布-訂閱更像交叉應用模式。
  • 當然,以上這些都是我自己的理解,歡迎交流。

參考學習: https://juejin.im/post/5a14e9edf265da4312808d86 https://molunerfinn.com/observer-vs-pubsub-pattern https://juejin.im/post/5bb1bb616fb9a05d2b6dccfa https://juejin.im/post/57de12355bbb50005e648bd8

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,461評論 6 532
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,538評論 3 417
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,423評論 0 375
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,991評論 1 312
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,761評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,207評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,268評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,419評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,959評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,782評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,983評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,528評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,222評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,653評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,901評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,678評論 3 392
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,978評論 2 374